首页 > 解决方案 > 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();

标签: phpsearchpaginationdisplay

解决方案


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


推荐阅读