未按预期进行分页的搜索

时间:2021-11-06 作者:Amir Rahman

problem image

为什么这个url模式会把我带到一个404页面,我在其他一些网站上看到了这个相同的模式可以很好地用于搜索和分页请帮助我我是wordpress的新手,不知道为什么会发生这种情况任何有经验的人都可以告诉我这里出了什么问题,寻找有用的答案,提前谢谢

$search = get_query_var("s");
$page_num = get_page_num();

$query = new WP_Query(array(
    "posts_per_page" => 4,
    "paged" => $page_num,
    "post_type" => "post",
    "s"     => $search
));   
get_page_num 在里面functions.php:

function get_page_num(){
    $name = is_front_page() ? "page":"paged";
    $page = get_query_var($name);
    $page = esc_html($page);
    $page = $page ? $page:1;
    return $page;
}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

搜索查询失败的原因是您丢弃了主查询并创建了一个全新的辅助查询。辅助查询有第二个页面,而主查询没有。主查询很重要,因为它没有第二页,所以显示404,这是正确的行为。

与其忽略主查询,不如对其进行修改。如果希望主查询在搜索中每页仅显示4个结果,请使其在搜索时每页仅显示4个结果。不要丢弃它并使用new WP_Query 具有posts_per_page 设置为4。使用pre_get_posts 要更改的筛选器posts_per_page 到主查询中的4。

函数文件中的一个微不足道的过滤器会一直满足您的需求:

add_action( function( \\WP_Query $query ) {
    if ( $query->is_search() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 4 );
    }
} );
这样,一个标准的post循环和标准分页就可以解决这个问题,而无需自定义查询。这比new WP_Query

是否有任何方法可以将WP\\u Query设置为默认值?

是,但:

这是一种非常糟糕的做法,因为模板中的任何内容都太迟了,无法解决您的问题,它会带来新的问题,您仍然需要双倍的查询WP_Query, 问题是您创建了一个新的,这是一个糟糕的做法如果要修改主查询,请通过pre_get_posts, 不要创建新的。

我强烈建议阅读pre_get_posts 文档,它将为您节省大量时间并使事情更清楚:

https://developer.wordpress.org/reference/hooks/pre_get_posts/

相关推荐

change pagination url

目前,我的分页页面URL为:http://www.example.com/category_name/page/2但我需要将此URL结构更改为:http://www.example.com/category_name/?page=2等有什么解决方案吗?