我有一个搜索结果页面,我想限制结果,即posts_per_page
。但是,如果我使用query_posts('posts_per_page=6')
,我将丢失原始查询。
如何在不损坏原件的情况下更改查询?
答案 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 );
}
});