Possible Duplicate:
How to know which one is the main query?
我很想知道所谓的“主要查询”是什么?
我在头版上有两个问题。
if (have_posts()) : while (have_posts()) : the_post();
// do the main loop
endwhile; endif;
$posts = new WP_Query(array(\'post_type\' => \'some_other_post_type\'));
while ($posts->have_posts()) : $posts->the_post();
// do the secondary loop
// but still operating with the some_post_type
endwhile; wp_reset_postdata();
我想要的只是将主查询修改为我的自定义帖子类型以提高效率。
add_action( \'pre_get_posts\', \'some_name\');
function some_name($query) {
if (is_front_page() && is_main_query()) {
$query->set( \'post_type\', \'some_post_type\' );
return;
}
}
我想的是,这个钩子中的条件只有在第一个循环中才是真的,但似乎
new WP_Query
正在通过它。
请你解释一下,什么是“主查询”,什么不是?
附言:我找到了almost a similar question 使用解决方案来改变pre_get_post
按自定义查询变量挂钩
最合适的回答,由SO网友:Tom J Nowell 整理而成
您的过滤器中有一个bug,即当您调用is\\u main\\u query时,您没有检查传递的查询是否是主查询,而是检查当前活动的查询是否是主查询,这将始终是真的。
因此,请尝试以下方法:
add_action( \'pre_get_posts\', \'some_name\');
function some_name($query) {
if ($query->is_front_page() && $query->is_main_query()) {
$query->set( \'post_type\', \'some_post_type\' );
return;
}
}