posts_per_page no limit

时间:2011-12-11 作者:Banjer

我想返回所有帖子query_posts. 我试过设置posts_per_page 非常高的数字,但是query_posts 发疯了,不回任何帖子。无限制查询帖子的正确方法是什么?

$args = array(
    \'post_type\'      => \'post\',
    \'cat\'            => \'22,47,67\',
    \'orderby\'        => \'name\',
    \'order\'          => \'ASC\',
    \'hide_empty\'     => 1,
    \'depth\'          => 1,
    \'posts_per_page\' => ?
    );

6 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

-1是你的答案!寻找posts_per_page here.

$args = array(
\'post_type\'      => \'post\',
\'cat\'            => \'22,47,67\',
\'orderby\'        => \'name\',
\'order\'          => \'ASC\',
\'hide_empty\'     => 1,
\'depth\'          => 1,
\'posts_per_page\' => -1
);
Important caveat: 这可能会导致一个非常大的查询,从而导致网站瘫痪。只有当您确信数据库可以处理它时,才能执行此操作。不在公共主题或插件中。

SO网友:t31os

或者你也可以通过WP_Query(这是什么query_posts 使用)的nopaging 参数,基本上做相同的事情。。

$args = array(
    \'nopaging\' => true
    // Your other args, etc..
);
它会做完全相同的事情,但是如果您以后不得不回头看,并且记不起您在做什么,我个人觉得您会更清楚,您在args数组中使用该参数的意图是什么。

然而,正如我所提到的,它们实际上会达到相同的效果。

有不止一种方法是无妨的,分享你所知道的总是很好的,我只想说这就是我回答的原因,尽管你已经有了足够的方法……)

SO网友:Brad Dalton

从子主题函数文件:

add_action( \'pre_get_posts\', \'wpsites_no_limit_posts\' );

function wpsites_no_limit_posts( $query ) {

if( $query->is_main_query() && !is_admin() && is_home() ) {

$query->set( \'posts_per_page\', \'-1\' );
$query->set( \'order\', \'ASC\' );
$query->set( \'post_type\', \'post\' );
$query->set( \'cat\', \'22,47,67\' );
$query->set( \'orderby\', \'name\' );
$query->set( \'order\', \'ASC\' );
$query->set( \'hide_empty\', \'1\' );
$query->set( \'depth\', \'1\' );

    }

}

SO网友:Austin Passy

使用Ricardo’s进行一些修改:

static $paged;
$post_ids = [];
do {
    $paged++;
    $defaults = [
        \'fields\' => \'ids\', // Only return the ID field to make this query faster.
        \'post_type\' => \'post\',
        \'posts_per_page\' => 100,
        \'no_found_rows\' => false, // We need pagination & the count for all posts found.
        \'paged\' => $paged,
        \'update_post_term_cache\' => false,
        \'update_post_meta_cache\' => false,
    ];
    $query = new WP_Query($defaults);
    if ($query->have_posts()) {
        foreach ($query->posts as $id) {
            $post_ids[] = $id;
        }
    }
} while ($query->max_num_pages > $paged);

return $post_ids;
这将通过仅对ID行进行查询并避免更新术语和元缓存来显著增加查询时间。

SO网友:Elkhouaja

你的问题的正确答案是\'posts_per_page\' => -1 因为-1 当其他用户回答时,每页将返回无限帖子。

我只想在问答中添加一个附加内容,

如果您想从WordPress管理面板的阅读设置中获取每页的帖子数,您必须调用get_option() 函数和过程posts_per_page 作为一个字符串。

$args = array(
    \'post_type\'      => \'post\',
    \'cat\'            => \'22,47,67\',
    \'orderby\'        => \'name\',
    \'order\'          => \'ASC\',
    \'hide_empty\'     => 1,
    \'depth\'          => 1,
    \'posts_per_page\' => get_option(\'posts_per_page\')
    );
我希望这个答案能像帮助我一样帮助别人。快乐编码Stackexchange用户

SO网友:Ricardo Canelas

Or..

function getAll($arg, $posts_per_page = 50)
{
    $data = array();
    $page = 1;

    do{
        $arg[\'paged\'] = $page;
        $arg[\'posts_per_page\'] = $posts_per_page;

        $query = new WP_Query($arg);

        foreach ($query->posts as $post){
            $data[] = $post;
        }

        $page++;

    }while(count($query->posts) === $posts_per_page);

    return $data;
}
结束

相关推荐