posts_per_page制限なし


41

ですべての投稿を返したい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
私はしばらくグーグルでWPコーデックスを検索していましたが、この単純な質問に対する直接的な答えを見つけることができません。私の質問はサンプルコードで明確に表現されていると思います。私はWPの専門家ではないので、質問をするためにここに来たのはそのためです。これらのStack Exchangeコミュニティの成長には、あなたにとって些細な質問に対する回答を提供することも役立ちます。個人的には、くだらないフォーラムへのリンクとは対照的に、検索結果にStack Overflowリンクが表示されるのが大好きです。
バンジャー

また、答えてくれてありがとう。コメントではなく回答として投稿する必要がありますので、私はそれを受け入れることができます。
Banjer

あなたの意見があります。質問を書いてくれたあなたの努力に感謝します。また、専門家でない質問は、このコミュニティで価値があることを証明できることに同意します。一方、このような質問が多すぎると、一部の専門家がここに参加するのを思いとどまらせることがあります。それは私が推測する何らかのバランスについてのすべてです。とにかく私は大きな支持者なので、あなたの次の質問を楽しみにしています:)ここでWPSEを楽しんでください。
ミハルマウ

PS:あなたも置き換えるtypeためにpost_type(または完全にこの行を削除します)。誰かがこの小さな間違いをコピー&ペーストできないように、ラトウィックの答えとあなたの質問の両方を編集します。
ミカルマウ

@Maugly修正担当者に感謝します... posts_per_pageに焦点を合わせたため、タイプミスをコピーしました!;)
ラトウィックガンガード

回答:


82

-1があなたの答えです!posts_per_page ここを探してください

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

重要な注意事項:これにより、サイトがダウンする可能性がある非常に大きなクエリが発生する可能性があります。これは、データベースで処理できることが確実な場合にのみ行ってください。公開テーマまたはプラグインではありません。


6
重要な警告:これにより、サイトがダウンする可能性のある非常に大きなクエリが発生する可能性があります。これは、データベースで処理できることが確実な場合にのみ行っください。公開テーマまたはプラグインではありません。
FUXIA

@toscho回答の更新としてコメントを追加します。
ラトウィックガンガード16年

あなたは私の命を救います!!
ダーラン・ディーテリッチ

@DarlanDieterichうれしい!:)
ラトウィックガンガード

23

または、引数を渡すWP_Queryquery_posts使用する)こともできnopagingます。これは基本的に同じことを行います

$args = array(
    'nopaging' => true
    // Your other args, etc..
);

それはまったく同じことをしますが、後でそれを振り返る必要があり、あなたが何をしていたのか覚えていない場合、私は個人的にそれがより明確になると感じていますアレイ。

しかし、私が述べたように、彼らは実際に同じことを達成します。

複数のアプローチをとることは害にならず、あなたが知っていることを共有することは常に素晴らしいことです、あなたがすでに十分なものを持っているにもかかわらず、それが私の答えの理由だと言って十分です..;)


3

子テーマ関数ファイルから:

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' );

    }

}

1

あなたの問題に対する正しい答えは、他のユーザーが答えると、ページあたり無制限の投稿を返す'posts_per_page' => -1ため-1です。

このQ / Aにアドオンを追加したいだけです。

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ユーザー


それは実際に素晴らしい追加です!
ハーバートヴァンフリート

1

または..

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;
}

2
コードを説明するためのコンテキスト、質問を解決するためのアイデアを追加する必要があります。
bueltge

1

リカルドをいくつか修正して使用する:

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行に対してのみクエリを実行し、用語およびメタキャッシュの更新を回避することで、クエリ時間が大幅に増加します。


いいね!共有してくれてありがとう。
リカルドカネラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.