it-swarm.com.de

posts_per_page no limit

Ich möchte ALLE Beiträge mit query_posts zurückgeben. Ich habe versucht, posts_per_page auf eine wirklich hohe Zahl zu setzen, aber query_posts ist verrückt und gibt keine Beiträge zurück. Was ist der richtige Weg, um Beiträge ohne Limit abzufragen?

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

-1 ist deine Antwort! Suchen Sie nach posts_per_pagehier .

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

Wichtiger Vorbehalt : Dies kann zu einer sehr großen Abfrage führen, die die Site zum Absturz bringen kann. Tun Sie dies nur, wenn Sie sicher sind, dass Ihre Datenbank damit umgehen kann. Nicht in öffentlichen Themen oder Plugins.

78

Oder alternativ können Sie WP_Query (was query_posts verwendet) das Argument nopaging übergeben, das im Grunde dasselbe tut.

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

Es wird genau dasselbe tun, aber wenn Sie später noch einmal darauf zurückblicken müssen und sich nicht erinnern können, was Sie getan haben, wird Ihnen persönlich klarer, was Sie mit diesem Parameter innerhalb der Argumente beabsichtigt haben Array.

Wie ich jedoch bereits erwähnte, werden beide tatsächlich dasselbe erreichen.

Es kann nicht schaden, mehr als einen Ansatz zu haben, und es ist immer schön zu teilen, was Sie wissen. Es reicht zu sagen, dass dies der Grund für meine Antwort ist, obwohl Sie bereits einen ausreichenden haben.

20
t31os

Aus der Funktionsdatei Ihres untergeordneten Themes:

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

    }

}
3
Brad Dalton

Die richtige Antwort für Ihr Problem lautet 'posts_per_page' => -1, da -1 unbegrenzt viele Beiträge pro Seite zurückgibt, wenn die anderen Benutzer antworten.

Ich möchte nur ein Add-On zu dieser Frage/Antwort hinzufügen.

Wenn Sie die Anzahl der Beiträge pro Seite aus der Leseeinstellung im WordPress-Verwaltungsbereich abrufen möchten, müssen Sie die Funktion get_option() aufrufen und posts_per_page als Zeichenfolge übergeben.

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

Ich hoffe, dass diese Antwort jemandem hilft, wie es mir hilft. Happy Coding Stackexchange Benutzer

1
Elkhouaja

Oder..

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;
}
0
Ricardo Canelas