PHP搜索页面超过1页

问题描述 投票:0回答:1

搜索后,URL链接页面分页有问题...如果我按升序搜索,则结果仅在第1页中显示,然后,如果我单击第2页,则结果将返回到默认列表。我知道问题是由于网址链接问题引起的,但是谁能给我一个有关如何解决该问题的建议。

代码如下

    if(!function_exists("add_action")) {
      return;
   }

   get_header();
   the_post();

   $industry_types = get_terms(
      [
         "taxonomy"   => "industry_type",
         "hide_empty" => false
      ]
   );

   /** Define default values */
   $default_query = [
      "post_type"     => "directory_member",
      "showposts"     => -1,
      "post_per_page" => 8,
      "orderby"       => "title",
      "order"         => "asc",
      "keywords"      => "",
      "paged"         => 1
   ];

   $query = wp_parse_args($_GET, $default_query);

   if(isset($_GET["keywords"])) {
      $query["s"] = esc_attr($_GET["keywords"]);
   }

   if(isset($_GET["industry_types"])) {
      $query["tax_query"] = [
         [
            "taxonomy" => "industry_type",
            "fields"   => "term_id",
            "terms"    => $_GET["industry_types"]
         ]
      ];
   }

   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);
?>
   <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", TEXTDOMAIN); ?>
                        </option>
                        <option value="desc" <?php selected("desc", $query["order"]); ?>>
                           <?php _e("Descending", TEXTDOMAIN); ?>
                        </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("Industries", TEXTDOMAIN); ?>
                        </button>
                        <div class="dropdown-menu p-3 mt-3 w-sm-100" style="width:600px;" aria-labelledby="dropdownMenuButton">
                           <div class="row">
                              <?php
                                 foreach($industry_types as $industry_type) {
                                    $checked = "";

                                    if(isset($_GET["industry_types"]) && in_array($industry_type->term_id, $_GET["industry_types"], false)) {
                                       $checked = ' checked="checked"';
                                    }
                                    ?>
                                    <div class="col-12 col-lg-6 mb-2">
                                       <input type="checkbox" name="industry_types[]" value="<?php echo $industry_type->term_id; ?>" id="industry-type-<?php echo $industry_type->slug; ?>" class="mr-3"<?php echo $checked; ?>>
                                       <label for="industry-type-<?php echo $industry_type->slug; ?>">
                                          <?php echo $industry_type->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", TEXTDOMAIN); ?>
                     </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="<?php echo sprintf(__("Search %s members...", TEXTDOMAIN), $members->found_posts); ?>" 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("Filter Results", TEXTDOMAIN); ?>
               </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_industry_types = get_the_terms($member_id, "industry_type");
                  $member_url            = get_field("url", $member_id);
                  ?>
                  <article class="col-12 col-md-6 col-lg-3 text-center mb-4">
                     <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>
                     <div class="member-name font-weight-bold mt-4">
                        <?php the_title(); ?>
                     </div>
                     <div class="industry-types mt-2">
                        <?php
                           foreach($member_industry_types as $member_industry_type) {
                              echo $member_industry_type->name;

                              if(next($member_industry_types)) {
                                 echo " / ";
                              }
                           }
                        ?>
                     </div>
                  </article>
                  <?php
                  wp_reset_query();
               }
            ?>
         </div>
         <?php
            $current_page = get_query_var("paged") | 1;
            $pages        = $members->max_num_pages | 1;
         ?>
         <nav aria-label="Page navigation" class="mt-5 pt-5">
            <ul class="pagination justify-content-center">
               <?php
                  $class = "";

                  if($current_page <= 1) {
                     $class = " disabled";
                  }
               ?>
               <li class="page-item<?php echo $class; ?>">
                  <a class="page-link" href="#" tabindex="-1">
                     <?php _e("Previous", TEXTDOMAIN); ?>
                  </a>
               </li>
               <?php
                  for($round = 1; $round <= $pages; $round++) {
                     $class = "";

                     if($current_page === $round) {
                        $class = " disabled";
                     }

                     $_GET["paged"] = $round;
                     $query_url     = build_query($_GET);
                     ?>
                     <li class="page-item<?php echo $class; ?>">
                        <a class="page-link" href="?<?php echo $query_url; ?>">
                           <?php echo $round; ?>
                        </a>
                     </li>
                     <?php
                  }

                  $query_url = "";
                  $class     = " disabled";

                  if($current_page < $pages) {
                     $class         = "";
                     $_GET["paged"] = $current_page + 1;
                     $query_url     = "?" . build_query($_GET);
                  }
               ?>
               <li class="page-item <?php echo $class; ?>">
                  <a class="page-link" href="<?php echo $query_url; ?>">
                     <?php _e("Next", TEXTDOMAIN); ?>
                  </a>
               </li>
            </ul>
         </nav>
      </div>
   </section>
<?php
   get_footer();

搜索后在URL链接页面分页上有问题...如果我按升序搜索,则结果仅在第1页中显示,然后,如果我单击第2页,则结果将返回默认列表。 ...

php search pagination display
1个回答
0
投票

问题在build_query()函数内部。不幸的是,您没有提供该功能的来源。我可以猜测到您的build_query()没有传递所有需要的参数或没有以错误的方式传递它们。

© www.soinside.com 2019 - 2024. All rights reserved.