WP循环如下:
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
...
为什么它优先于以下内容?foreach( (new WP_Query())->get_posts() as $post ) { ... }
对我来说,后者的情况更为明显。我是PHP和WP的新手,我正在努力理解为什么我应该使用前者。使用standard loop
? 正在迭代get_posts()
效率有下降吗?
WP循环如下:
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
...
为什么它优先于以下内容?foreach( (new WP_Query())->get_posts() as $post ) { ... }
对我来说,后者的情况更为明显。我是PHP和WP的新手,我正在努力理解为什么我应该使用前者。使用standard loop
? 正在迭代get_posts()
效率有下降吗?
几个原因
此外,您还可以设置the_post
正确,允许以下功能the_content
etc正常工作。一些过滤器甚至可以在循环中插入“posts”
WP_Query
获取其拥有的数据并创建WP_Post
对象。通过标准的post循环,这些都是根据需要创建的$post
您正在重写一个全局变量,这可能会产生意外的后果,尤其是如果此循环嵌套在您不知道的另一个循环中foreach
这种情况是不好的做法,就像创建然后使用对象而不进行错误检查一样。array_walk
:$q = new WP_Query([ ..args ]);
array_walk( $q->get_posts(), function( $post ) {
//
});
请注意,我不建议使用array_walk
.例如,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>\';
}
这样做的优点是,它仍然调用标准循环的所有函数,但它们已经被抽象掉了。我相信还有其他的循环,但标准循环是可靠的、可预测的,并且对所有人都可读我建议您查看文档:
您可以在那里找到更多详细信息。下面是一个简短的摘要:
通过该循环,您可以访问:
Template Tags
Conditional Tags
并非所有模板和条件标记都依赖于循环,有关在循环中使用什么的概述:此外,还有一些挂钩可以与回路一起使用,例如:从更广泛的角度来看,您可以包括以下内容:和下列所有过滤器:即使您需要(有时是不可避免的)附加循环,也不必在循环范式之外进行: