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
保留,除非它被修改为不再是主查询。