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