如何在不“覆盖”它的情况下更改WordPress查询?

时间:2016-01-26 18:16:23

标签: wordpress

我有一个搜索结果页面,我想限制结果,即posts_per_page。但是,如果我使用query_posts('posts_per_page=6'),我将丢失原始查询。

如何在不损坏原件的情况下更改查询?

2 个答案:

答案 0 :(得分:2)

您可以使用pre_get_posts filter访问/更改DirectiveMetadata对象。在 functions.php

$query

答案 1 :(得分:2)

永远不要使用query_posts,它会破坏主查询对象($wp_query)以及依赖主查询对象的所有功能。它还会破坏页面功能。除此之外,它很慢并重新运行查询。 query_posts应与create_function()eval()extract()等函数一起放在最邪恶的列表之上。

如果您需要更改主查询,请始终使用pre_get_posts来执行此操作。永远不要使用自定义查询更改主查询,它可能会解决一个问题,但它会创建许多其他问题。

以下内容可行

add_action( 'pre_get_posts', function ( $q )
{
    if (    !is_admin()
         && $q->is_main_query()
         && $q->is_search()
    ) {
        $q->set( 'posts_per_page', 6 );
    }
});
相关问题