当您访问站点的链接时,WordPress会识别该链接并理解(使用rewrite rules 如果URL中没有pretty permalinks) URL的请求是什么。
在WordPress之后,使用此请求运行查询。This is the main query. 因此,主查询是由页面的URL触发的查询。
这看起来很奇怪,但主查询甚至可能不是第一个查询。这是因为WordPress在运行主查询之前做了很多事情:包括插件,包括主题,还触发一些actions 和filters.
因此,如果一个插件或主题钩子插入其中一个钩子并运行一个查询,那么这个钩子实际上是在主查询之前运行的。
运行主查询后,WordPress将包含相应的模板文件。适当的文件由template hierarchy.
因此,当加载模板文件时,主查询已经运行,您可以使用the loop.
如果您使用query_posts
在模板文件中,这会导致再次运行主查询—降低页面加载速度。
这就是为什么如果需要更改主查询,使用pre_get_posts
hook 这样就可以在运行之前更改查询,因此无需再次运行它。
请注意pre_get_posts
针对每个查询运行,不仅针对主查询,而且使用is_main_query
在挂钩到该操作的函数中,您只能控制主查询。
正如您所知,WordPress提供了从main运行不同查询的可能性,并且您有不同的选择来执行此操作,最流行的建议是使用WP_Query.
Now, every query that is not the main is a secondary query (即使在主查询之前运行,如上所述)。