从前面的问题中,我知道您希望优化查询。没有必要改变WP_Query
进入get_posts
用于性能。正如我在另一篇帖子中所说的,是的,get_posts()
快于WP_Query
因为get_posts()
合法地破坏分页,但是什么呢get_posts()
do可以通过WP_Query
.
真正了解什么get_posts()
是的,让我们看看source code. 本质上,get_posts()
执行以下操作:(让我们忘记中无用的参数get_posts()
)
$args = [
\'no_found_rows\' => true,
\'ignore_sticky_posts\' => 1
// Any other user passed arguments
];
$r = new WP_Query( $args );
return $r->posts;
这一切意味着什么
get_posts()
只返回
$posts
属性。
$posts
持有一系列帖子
\'no_found_rows\' => true
是合法破坏分页的内容,也是您不应使用get_posts
用于分页查询。这也是为什么get_posts()
比正常速度快WP_Query
默认情况下为no_found_rows
设置为false。因为get_posts()
仅返回帖子数组,而不是查询对象,必须使用普通foreach
一圈接一圈地穿过柱子。另一件需要注意的事情是,由于查询对象没有返回,模板标记如下the_content()
不可用,因为$post
全局未设置为当前职位。在正常循环中,the_post()
设置postdata,使模板标记可用。对于get_posts()
, 我们需要使用setup_postdata( $post )
在我们的foreach循环中
正确循环get_posts()
, 我们需要这样做
$posts_array = get_posts( $args );
if ( $posts_array ) { // Make sure we have posts before we attempt to loop through them
foreach ( $posts_array as $post ) {
setup_postdata( $post );
// Now we can use template tags
the_title();
the_content();
}
wp_reset_postdata(); // VERY VERY IMPORTANT
}
我不会为了改变现有的WP_Query
实例以优化它们。只需添加\'no_found_rows\' => true
到您的WP_Query
争论,维奥拉,你在做什么get_posts()
正在做