php - PHP搜索页面超过1页
问题描述
我在搜索后的 url 链接页面分页上有问题...如果我按升序搜索,结果只会显示在第 1 页,然后如果我单击第 2 页,结果将返回默认列表。我知道问题是由于 url 链接问题引起的,但是任何人都可以给我一个关于如何解决问题的建议..
代码如下
<?php
if(!function_exists("add_action")) {
return;
}
get_header();
the_post();
$member_categories = get_terms(
[
"taxonomy" => "member_category",
"hide_empty" => false
]
);
/** Define default values */
$default_query = [
"post_type" => "directory_member",
"posts_per_page" => 36,
"orderby" => "title",
"order" => "asc",
"keywords" => "",
"paged" => get_query_var("paged")
];
$query = wp_parse_args($_GET, $default_query);
if(isset($_GET["keywords"])) {
$query["s"] = esc_attr($_GET["keywords"]);
}
if(isset($_GET["member_categories"])) {
$query["tax_query"] = [
[
"taxonomy" => "member_category",
"fields" => "term_id",
"terms" => $_GET["member_categories"]
]
];
}
if(isset($_GET["order_by"])) {
$query["orderby"] = esc_attr($_GET["order_by"]);
}
if(isset($_GET["order_by"])) {
$query["order"] = esc_attr($_GET["order"]);
}
$members = new WP_Query($query);
?>
<style>
.page_butt{
padding: 10px;
}
</style>
<section id="content">
<div class="container">
<form action="#filter" id="filter" method="get" class="row">
<div class="col-12 col-lg-8">
<div class="row">
<div class="form-group col-12 col-md-auto">
<select name="order_by" id="order-by" class="form-control">
<option value="title" <?php selected("title", $query["orderby"]); ?>>
<?php _e("Alphabetical", TEXTDOMAIN); ?>
</option>
<option value="industry_type" <?php selected("industry_type", $query["orderby"]); ?>>
<?php _e("Industry Type", TEXTDOMAIN); ?>
</option>
<option value="date" <?php selected("date", $query["orderby"]); ?>>
<?php _e("Date Joined", TEXTDOMAIN); ?>
</option>
</select>
</div>
<div class="form-group col-12 col-lg-auto">
<select name="order" id="order" class="form-control">
<option value="asc" <?php selected("asc", $query["order"]); ?>>
<?php _e("Ascending", "mrca"); ?>
</option>
<option value="desc" <?php selected("desc", $query["order"]); ?>>
<?php _e("Descending", "mrca"); ?>
</option>
</select>
</div>
<div class="form-group col-12 col-lg-auto">
<div class="dropdown">
<button class="text-left btn btn-outline-secondary dropdown-toggle col-12" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php _e("Categories", "mrca"); ?>
</button>
<div class="dropdown-menu p-3 mt-3 w-sm-100" style="width:500px;" aria-labelledby="dropdownMenuButton">
<div class="row">
<?php
foreach($member_categories as $member_category) {
$checked = "";
if(isset($_GET["member_categories"]) && in_array($member_category->term_id, $_GET["member_categories"], false)) {
$checked = ' checked="checked"';
}
?>
<div class="col-12 col-lg-6 mb-2">
<input type="checkbox" name="member_categories[]" value="<?php echo $member_category->term_id; ?>" id="member-category-<?php echo $member_category->slug; ?>" class="mr-3"<?php echo $checked; ?>>
<label for="member-category-<?php echo $member_category->slug; ?>">
<?php echo $member_category->name; ?>
</label>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<div class="form-group col-auto d-none d-lg-block">
<button type="submit" class="btn btn-primary">
<i class="fa fa-filter"></i>
<?php _e("Filter Results", "mrca"); ?>
</button>
</div>
</div>
</div>
<div class="col-12 col-lg-4 pr-lg-0">
<div class="float-right form-group w-100">
<input type="search" name="keywords" placeholder="Search Member" class="form-control" value="<?php echo esc_html($query["keywords"]); ?>">
</div>
</div>
<!--<div class="col-12 form-group col-auto d-block d-lg-none">-->
<!-- <button type="submit" class="btn btn-primary w-100">-->
<!-- <i class="fa fa-filter"></i>-->
<!-- <?php _e("Filtersss Results", "mrca"); ?>-->
<!-- </button>-->
<!--</div>-->
</form>
<div class="row mt-5 pt-5">
<?php
while($members->have_posts()) {
$members->the_post();
$member_id = get_the_ID();
$member_logo = get_field("logo", $member_id);
$member_logo_url = $member_logo["sizes"]["large"];
$member_member_categories = get_the_terms($member_id, "member_category");
$member_url = get_field("url", $member_id);
$use_url = false;
?>
<article class="col-12 col-md-6 col-lg-2 text-center mb-4">
<?php
if($member_logo_url) {
if(strlen($member_url) > 7) {
$use_url = true;
?>
<a href="<?php echo esc_url($member_url); ?>" target="_blank">
<img src="<?php echo $member_logo_url; ?>" alt="<?php echo esc_html(get_the_title()); ?>" class="img-fluid">
</a>
<?php
}
else {
?>
<img src="<?php echo $member_logo_url; ?>" alt="<?php echo esc_html(get_the_title()); ?>" class="img-fluid">
<?php
}
}
?>
<div class="member-name font-weight-bold mt-4">
<?php
if(strlen($member_url) > 7) {
?>
<a href="<?php echo esc_url($member_url); ?>" target="_blank">
<?php the_title(); ?>
</a>
<?php
}
else {
the_title();
}
?>
</div>
<div class="member-category mt-2">
<?php
foreach($member_member_categories as $member_member_category) {
echo $member_member_category->name;
if(next($member_member_categories)) {
echo " / ";
}
}
?>
</div>
</article>
<?php
wp_reset_query();
}
?>
</div>
<div class="row mt-5 pt-5">
<div class="mx-auto">
<?php
$current_page = get_query_var("paged");
$pages = $members->max_num_pages;
if($pages > 1) {
?>
<form action="" method="get" class="mt-4">
<div class="text-center form-inline">
<select name="paged" id="page" class="form-control form-control-sm w-sm-100" onchange="submit();" style="display:none;">
<option value="1" <?php selected($current_page, $page); ?>>1</option>
<?php
for($page = 2; $page <= $pages; $page++) {
?>
<option value="<?php echo $page; ?>" <?php selected($current_page, $page); ?>>
<?php echo $page; ?>
</option>
<?php
}
?>
</select>
<?php
// Previous and Next Button by Frank
$url = '/membership/members-directory/page/';
if($current_page !== 0){ //Not First Page?
//First page <<
echo '<a href="'.$url.'1" class="page_butt" > << </a>';
//Previous page <
echo '<a href="'.$url.($current_page-1).'" class="page_butt" > < </a>';
}
//Previous pages
for($i=-3; $i<0; $i++){
if(($current_page+$i) >= 1){
echo '<a href="'.$url.($current_page+$i).'" class="page_butt" >'.($current_page+$i).'</a>';
}
}
//Middle ...
if((($current_page+$i) > 2) || ($current_page < $page-1)){
echo '<span class="page_butt">...</span>';
}
//Next Pages
for($i=1; $i<=3; $i++){
if($current_page === 0){
echo '<a href="'.$url.($current_page+$i+1).'" class="page_butt">'.($current_page+$i+1).'</a>';
}else if(($current_page+$i) <= ($page-1)){
echo '<a href="'.$url.($current_page+$i).'" class="page_butt" >'.($current_page+$i).'</a>';
}
}
//Next Page >
if($current_page < $page-1){ //Page is not the last page
if($current_page === 0){//if first page
echo '<a href="'.$url.($current_page+2).'" class="page_butt"> > </a>';
}else{
echo '<a href="'.$url.($current_page+1).'" class="page_butt"> > </a>';
}
//Last Page >>
echo '<a href="'.$url.($page-1).'" class="page_butt" > >> </a>';
}
?>
</div>
</form>
<?php
}
?>
</div>
</div>
</div>
</section>
<?php
get_footer();
解决方案
问题出在 build_query() 函数内部。不幸的是,您没有提供该功能的来源。我只能猜测您的 build_query() 没有传递所有需要的参数或以错误的方式传递它们。
推荐阅读
- python - 如何从具有多个 JSON 行的 JSON 文件中的选择对象创建 python 字典(键:值)
- asp.net-identity - IdentityServer4 + ASP.NET 身份用户管理
- regex - 我想使用正则表达式在 sublime text 3 中的同一位置替换每个文件中的不同单词
- amazon-web-services - 为什么我的 AWS ECS 应用程序需要“奇怪”的 TCP 端口才能从 ECR 中提取?
- android - 如何在 Appcelerator 中为详细的图像着色?
- windows - Send a key-code to a running application in windows
- bootstrap-4 - BS 颜色类别的上下文颜色命名不一致
- c# - 在表格渲染之前将行标记为选中
- javascript - 使用 js 对 API 调用响应进行排序
- r - 删除满足条件的 2 个连续行