问题描述
Possible Duplicate:
How to know which one is the main query?
我很好奇知道什么叫”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
正在通过它。
你可以解释一下,”main query” 是什么?
PS:我已经找到 almost a similar question 与解决方案来改变 pre_get_post
钩子中的查询,通过自定义查询 vars 。
最佳解决方案
您的过滤器有一个错误,即当您调用 is_main_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;
}
}
次佳解决方案
主要查询是当 WordPress 确定要显示请求 URI 时自动触发的查询。
WP_Query
的后续实例从不是主要查询,但您可以使用它们来替换 $GLOBALS['wp_the_query']
中的主查询结果。不要这样做
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。