如何知道哪个是主查询?

时间:2013-01-14 作者:Jamie

我只是使用pre_get_posts 但它没有起作用。当我移除$query->is_main_query() 它确实奏效了。

那么,您如何知道主查询是什么。我知道有这个功能is_main_query. 我想问的是,有没有办法知道你在看哪一个?WordPress如何知道哪个是主要查询?如果你有三到四个不同的原因,如类别、帖子类型、页面。哪个是主要的?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

WP_Query->is_main_query() 方法源(同名函数调用的)非常简短:

function is_main_query() {
    global $wp_the_query;
    return $wp_the_query === $this;
}
主查询是存储在中的查询$wp_the_query 全球的但这是什么全球性的?WP设置主查询时,会将其存储在两个位置:$wp_the_query$wp_query. 后者更为人所知,因为该变量通常用于处理主查询,而query_posts() 更改。

然而query_posts() 工作原理如下:

function query_posts($query) {
    $GLOBALS[\'wp_query\'] = new WP_Query();
    return $GLOBALS[\'wp_query\']->query($query);
}
它中断了$wp_query$wp_the_query. 反过来可以通过wp_reset_query() 重新确立:

function wp_reset_query() {
    $GLOBALS[\'wp_query\'] = $GLOBALS[\'wp_the_query\'];
    wp_reset_postdata();
}
因此,主查询是WP在核心加载期间设置的查询。

这通常是$wp_query 保留,除非它被修改为不再是主查询。

结束

相关推荐

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

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