我只是对使用的查询执行了操作 pre_get_posts
它没有用。 当我删除 $query->is_main_query()
它确实有效。
那么,您怎么知道什么是主要查询。 我知道有这个功能 is_main_query
. 我问的是有没有办法告诉你正在看哪个? WordPress 如何知道哪个是主要查询? 如果您出于不同的原因(例如类别、帖子类型、页面)有三四个。 哪个是主要的?
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
成立,除非它被修改为不再是主要查询。