主环路和次环路的确切定义是什么?

时间:2013-08-20 作者:UzumakiDev

我的假设是,主循环始终是第一个循环,您应该始终使用query\\u post?这是正确的吗?然后,每当您需要输入一些参数以获得不同的帖子集或顺序时,都可以使用WP\\u Query或get\\u posts。这两个都是二次回路?我只是觉得我几乎没有与主循环进行交互,所以我有这种感觉,虽然一切正常,但我只是没有把事情做好。

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

当您访问站点的链接时,WordPress会识别该链接并理解(使用rewrite rules 如果URL中没有pretty permalinks) URL的请求是什么。

在WordPress之后,使用此请求运行查询。This is the main query. 因此,主查询是由页面的URL触发的查询。

这看起来很奇怪,但主查询甚至可能不是第一个查询。这是因为WordPress在运行主查询之前做了很多事情:包括插件,包括主题,还触发一些actionsfilters.

因此,如果一个插件或主题钩子插入其中一个钩子并运行一个查询,那么这个钩子实际上是在主查询之前运行的。

运行主查询后,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 (即使在主查询之前运行,如上所述)。

结束

相关推荐

Problems with loop

我的索引中有这个循环。php: <?php if (have_posts()) : while (have_posts()) : get_template_part( \'post\' ); endwhile; endif; ?> 调用此模板<?php ?> <h2 id=\"post-<?php the_ID()