子循环/嵌套循环的最佳实践

时间:2011-04-14 作者:Tom Auger

我正在尝试整理WP文档的泥沼,只需要有人来澄清术语“循环”的用法以及它与子循环的关系。

我对“循环”的理解是,每个页面/帖子都有一个“循环”,而且应该永远只有一个“循环”,循环负责遍历该页面/帖子/归档的内容。

尤其是,\\u post()将使用从主循环中查询的当前位置提取的相关数据填充许多全局变量。

我也相信我理解,每当创建子循环时(假设您想要获得类别归档中列出的每个帖子的所有子帖子的列表),您应该使用WP\\u查询对象的新实例,如:$subQuery=new WP\\u Query($args);

我对Codex文档感到困惑的地方是in the documentation of Wp_Query, 特别是$subQuery->have\\u posts()和$subQuery->the\\u post()。

文档中列出了这两种方法的“在循环中使用”,这意味着(对我来说)它们操作的全局变量会影响(外部)循环。是这样吗?或者$subQuery->have\\u posts()是否可以安全使用(即:只读)?那么->the\\u post()呢?它会影响循环全局变量吗?

迭代嵌套子循环中不会干扰循环的元素的最佳实践是什么?

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

第一次查看When should you use WP_Query vs query_posts() vs get_posts()?

我对“循环”的理解是,每个页面/帖子都有一个“循环”,而且应该永远只有一个“循环”,循环负责遍历该页面/帖子/归档的内容。

是的,它通常被称为“主回路”。但“循环”通常可以指迭代任何一组帖子。

或者$subQuery->have\\u posts()是否可以安全使用(即:只读)?

是的,这只是一种检查循环中是否有尚未迭代的帖子的方法。

那么->the\\u post()呢?它会影响循环全局变量吗?

是的,是的。在使用the_post() (函数或方法)需要调用wp_reset_postdata() (或更全球化wp_reset_query() 如果您正在处理主循环)来清理全局变量。

迭代嵌套子循环中不会干扰循环的元素的最佳实践是什么?

这取决于您是否需要使用依赖于全局$post, 所以有几种方法。您可以通过新WP_Query 对象并随后进行清理,或仅使用get_posts() 用它做点什么。

结束

相关推荐

Paging in a sidebar mini loop

我切换到了另一个主题,并决定用其中的一些默认代码制作一个小部件,在自定义循环中显示我的美味帖子、推特帖子、su帖子和youtube视频(不包括主循环中的这些类别)。但是现在。。。分页不再工作。我制作了这个小部件:// =============================== EDL Sidebar Posts Widget ====================================== class SidebarPosts extends WP_Widget { &#x