What is "main query"?

时间:2013-01-15 作者:Jake

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 按自定义查询变量挂钩

2 个回复
最合适的回答,由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;
    }
}

SO网友:fuxia

主查询是WordPress确定要为请求URI显示什么时自动触发的查询。

的后续实例WP_Query 永远不是主查询,但您可以使用它们在中替换主查询的结果$GLOBALS[\'wp_the_query\']. Don’t do that.

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post