如何限制WP_QUERY获得的帖子数量?

时间:2015-03-18 作者:EliasNS

我一直在研究Google和WPSE,我唯一反复看到的就是使用showposts, 这是不赞成的。

我熟悉WP_Query, 我想如果我posts_per_page 达到我的极限(即5),以及nopagingtrue, 它会变成类似“好吧,我只给你5篇帖子”。但这行不通。

enter image description here

我该怎么做?

5 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我想现在我明白你想做什么了。使用运行自定义查询时WP_Query 并将限制设置为每页仅获取5篇帖子,查询仅检索5篇帖子,该查询仅容纳5篇帖子,BUT 为了分页,WP_Query 仍然运行整个数据库,并统计与查询条件匹配的所有帖子。

当你看到$found_posts$max_num_pages 查询的属性。让我们举一个例子:

您有20篇属于默认帖子类型的帖子post. 你only 需要最新的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_posts 比…快一点WP_Query 虽然get_posts 使用WP_Query

结论总之,如果您不打算在查询中使用分页,那么最好\'no_found_rows=true\' 在您的查询中加快速度并节省浪费资源。

SO网友:shuvroMithun

好的,让您拥有名为“blog\\u posts”的帖子类型,并且您希望获取该帖子类型的5篇帖子。这是你需要做的

$args = array(
        \'post_type\' => \'blog_posts\',
        \'posts_per_page\' => \'5\',
);


$query = new WP_Query($args);
上面的查询将返回5篇类型为“blog\\u posts”的文章,如果不是自定义的文章类型,那么只需这样替换即可\'post_type\' => \'posts\', 如果要获取所有帖子,请按以下方式替换\'posts_per_page\' => \'-1\', , 有关更多详细信息WP Query

SO网友:EliasNS

在与@Pieter Goosen就问题的评论进行对话后,我想我可以回答问题并解释我的错误。

关键是found_posts 让我困惑。我认为,这个数字是检索到的帖子,但不是。It is the number of posts that match the criteria. 就像WP_Query 有两个部分:一个用于查找(所有)帖子,另一个用于在检查pagination 参数。所以我们有$post_count 属性,表示获取的帖子数(Codex说The number of posts being displayed), 这当然等于posts_per_page 参数,以及$posts 数组属性。

所以WP_Query 没有像我想的那样做任何无用的工作^^

希望这对其他人有帮助!

SO网友:Shreyo Gi

我知道@user1750063已经提到了代码,但是试试这个

$args = array (
    \'post_type\'              => \'custom_post\',
    \'nopaging\'               => false,
    \'posts_per_page\'         => \'5\',
    \'order\'                  => \'DESC\',
    \'orderby\'                => \'ID\',
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // display content
    }
} else {
    // display when no posts found
}

wp_reset_postdata();     // Restore original Post Data

SO网友:Hasan Gad

我会用自定义字段限制它,请检查以下查询示例:

$wp_query = new WP_Query("orderby=DESC&post_type=portfolio&meta_key=FeaturedProject&meta_value=1&posts_per_page=6");
它将返回6个特色项目。

结束

相关推荐

是否执行包含多个“and”元查询的大型WP_Query?

我有一个自定义的帖子类型product. 访问者可以搜索products 有许多过滤器。他们可以设置color, 这个size, 这个price, 等。产品的详细信息存储在高级自定义字段(ACF)中。我的解决方案是WP_Query 具有meta_queries. 全部的WP_Meta_Queries 都在AND-关系我的问题是:如果访问者为产品创建更多的过滤器,那么查询总是会变慢。我认为INNER JOINs开启wp_postmeta 都是问题所在。我有六个INNER JOIN在这张桌子上。这个问题有解决