几个原因
1。过滤器和操作通过使用标准循环,可以执行插件所依赖的各种过滤器和操作。
此外,您还可以设置the_post
正确,允许以下功能the_content
etc正常工作。一些过滤器甚至可以在循环中插入“posts”
2。内存效率
通过将所有帖子作为一个数组获取,您可以强制
WP_Query
获取其拥有的数据并创建
WP_Post
对象。通过标准的post循环,这些都是根据需要创建的
3。PHP警告
您的循环不会检查是否确实找到了任何帖子,因此不可能给出“没有可用帖子”样式的消息。它有时还会生成PHP警告。
4。通过使用覆盖WP全局$post
您正在重写一个全局变量,这可能会产生意外的后果,尤其是如果此循环嵌套在您不知道的另一个循环中
5。PHP效率和正确性
在
foreach
这种情况是不好的做法,就像创建然后使用对象而不进行错误检查一样。
6。调试许多工具和插件都假定您使用的是标准循环,并且构建这些工具和插件是为了让生活更轻松。这样做你就把所有的东西都扔掉了
7。有更好的选择crude 但比foreach更好的选择可能是array_walk
:
$q = new WP_Query([ ..args ]);
array_walk( $q->get_posts(), function( $post ) {
//
});
请注意,我不建议使用
array_walk
.
PHP生成器现在并不是说您不能在仍然拥有所有优势的情况下使用不同样式的循环。
例如,WP Scholar有一篇文章展示了一个基于php生成器的循环:
if ( have_posts() ) {
foreach ( wp_loop() as $post ) {
echo \'<h1>\' . esc_html( get_the_title() ) . \'</h1>\';
}
} else {
echo \'<h1>No posts found!</h1>\';
}
这样做的优点是,它仍然调用标准循环的所有函数,但它们已经被抽象掉了。
https://wpscholar.com/blog/creating-better-wordpress-loop/
我相信还有其他的循环,但标准循环是可靠的、可预测的,并且对所有人都可读