How to limit the number of posts that WP_Query gets?
WordPress WP_Query 如何限制查询数量
解决方法,使用参数posts_per_page。
当使用 WP_Query 运行自定义查询并将限制设置为每页仅获取 5 个帖子时,查询只会检索 5 个帖子,并且该查询将只包含 5 个帖子,但为了分页,WP_Query仍然运行整个数据库并计算与查询条件匹配的所有帖子。
当查看查询的 $found_posts 和 $max_num_pages 属性时,可以看到这一点。举个例子:
共有 20 个帖子,只需要最新的 5 个帖子而无需分页。查询如下所示:
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
// 5echo $q->found_posts
//20
echo $q->max_num_pages
//4
对于只有几个帖子的网站,这种额外工作的影响很小,但如果正在运行一个包含数百或数千个帖子的网站,这可能会很昂贵。如果您只需要 5 个最新帖子,这是浪费资源。
有一个名为 no_found_rows 的参数,它使用布尔值,可以使用该值在找到需要的 5 个帖子后使查询退出。这将迫使WP_Query在检索查询的帖子数量后不再查找任何计算条件的帖子。这个参数已经内置到get_posts中,这就是为什么get_posts比WP_Query快一点,尽管get_posts使用WP_Query。
总之,如果您不打算在查询中使用分页,那么在查询中使用“no_found_rows=true”总是明智的,以加快速度并节省资源浪费。
最终解决方法:
$q = new WP_Query( 'posts_per_page=5&no_found_rows=true');
分享笔记