问题描述

我一直在研究 Google 和 WPSE,我唯一重复的是使用不推荐使用的 showposts

我熟悉 WP_Query,我认为如果我将 posts_per_page 设置为我的极限 (即 5),而 nopaging 设置为 true,则会变成 「Ok,我只给你 5 个帖子」 。但这不行。

我该怎么做?

最佳解决方案

我觉得现在我明白你在做什么当您使用 WP_Query 运行自定义查询并设置限制,每页只能发送 5 个帖子时,查询将仅检索 5 个帖子,该查询将仅保留 5 个帖子,但为了分页,WP_Query 仍然运行整个数据库并对与查询条件匹配的所有帖子进行计数。

当您查看 $found_posts$max_num_pages 属性的查询时可以看到。举个例子:

您有 20 个帖子属于默认帖子类型 post 。你只需要最新的 5 个帖子,无需分页。你的查询看起来像这样

$q = new WP_Query( 'posts_per_page=5' );
  • var_dump( $q->posts )会给你最新的 5 个职位

  • echo $q->found_posts 会给你 20

  • echo $q->max_num_pages 会给你 4

这个额外的工作的影响在只有少数帖子的网站上是极少的,但如果您正在运行一个有数百或数千个帖子的网站,这可能会更昂贵。如果你只需要 5 个最新的帖子,这是浪费资源

有一个名为 no_found_rows 的无文档参数,它使用布尔值,您可以在找到所需的 5 个帖子后将其设为查询保释。这将迫使 WP_Query 在检索到查询的帖子数量后,不再查找更多的帖子数学标准。该参数已经建立到 get_posts 中,这就是为什么 get_postsWP_Query 要快一些,尽管 get_posts 使用 WP_Query

总而言之,如果您不打算在查询中使用分页,在查询中'no_found_rows=true'总是明智之举,可以加快处理速度,节约浪费资源。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。