WordPress Query Loop Limit umgehen: Mehr als 100 Beiträge im Block Editor anzeigen

Der Query-Loop-Block des Block-Editors (deutsch: Abfrage-Schleife-Block) erlaubt maximal 100 Ergebnisse pro Seite. Wenn mehr Ergebnisse vorhanden sind, erscheint die Pagination und es geht auf Seite 2 weiter. Diese Limitierung ist von WordPress bewusst gewählt und macht vor dem Hintergrund der Website-Performance auch grundsätzlich Sinn. Dennoch gibt es Situationen, in denen z. B. immer alle Ergebnisse auf einer Seite angezeigt werden sollen, auch wenn es mehr als 100 sind.

Mit einer sog. Block Variation lässt sich die Limitierung des Loops umgehen.

Notwendige Schritte zur Umgehung der Limitierung

WordPress bietet das Feature der »Block Variations«, mit dem wir im Theme-Development die Standard-Funktionalität von Blöcken verändern können. Im Falle unserer 100er-Limitierung setzen wir auf dem Query-Loop-Block auf und überschreiben in der Variation die Einstellung für posts_per_page. Redaktionell stehen dann später zwei Query-Loop-Blöcke zur Verfügung.

Die Limitierung besteht allerdings nicht nur in der Block-Einstellung, in der kein Wert über 100 eingegeben werden kann. Auch die REST API – mit der der Block-Editor selbst im Backend arbeitet – ist entsprechend begrenzt. Im zweiten Schritt passen wir daher auch die REST API an.

Block Variation für den Query-Loop-Block erstellen

Beginnen wir mit der Block Variation. Der folgende Code wird in der functions.php oder an vergleichbaren Stellen integriert. Er fügt eine Block Variation namens »kulturbanause Loop« hinzu, die auf dem Query-Loop-Block basiert und 200 Beiträge anzeigt.

Beachtet bitte, dass ein klassischer WP_Query auch den Wert -1 für unendlich viele Beiträge erlaubt. Das ist hier nicht möglich, sodass bei sehr vielen Ergebnissen auch ein entsprechend hoher Wert eingetragen werden muss.

<?php 

/** 
 * Add block variation »kulturbanause Loop« for Query Loop Block
 * Displays 200 results 
 */

$max_posts = 200;

function kb_loop_variation( $variations, $block_type ) {
    global $max_posts;

    // Modify query block
    if ( 'core/query' !== $block_type->name ) {
        return $variations;
    }

    // Add variation
    $variations[] = array(
        'name'        => 'kulturbanause-loop',
        'title'       => __( 'kulturbanause Loop', 'textdomain' ),
        'description' => __( 'Loop mit bis zu 200 Beiträgen', 'textdomain' ),
        'scope'       => array( 'inserter' ),
        'isDefault'   => false,
        'attributes'  => array(
            'namespace' => 'kb/kulturbanause-loop',
            'query' => array(
                'postType' => 'post',
                'perPage' => $max_posts,
            ),
        )
    );

    return $variations;
}

add_filter( 'get_block_type_variations', 'kb_loop_variation', 10, 2 );

Sobald der Editor neu geladen wurde, steht unser neuer Block namens »kulturbanause Loop« zur Verfügung. Er funktioniert wie der Standard-Query-Loop-Block und lädt bis zu 200 Beiträge.

Auswahl des Blocks im Block-Editor von WordPress

REST-API-Limit von 100 Posts aufheben

Im Frontend funktioniert bereits alles. Im Backend allerdings nicht. Hier werden im Loop keine Beiträge angezeigt, sondern nur die Ladeanimation für das Suchen nach Beiträgen. Sofern mehr als 100 Einträge vorhanden sind, zeigt die Browser-Konsole folgenden erklärenden Fehler:

Fehlermeldung beim Erreichen des REST-API-Limits in der Browser-Konsole

{„code“:“rest_invalid_param“,“message“:“Ung\u00fcltige(r) Parameter: per_page“,“data“:{„status“:400,“params“:{„per_page“:“per_page muss zwischen 1 (inklusiv) und 100 (inklusiv) liegen“},“details“:{„per_page“:{„code“:“rest_out_of_bounds“,“message“:“per_page muss zwischen 1 (inklusiv) und 100 (inklusiv) liegen“,“data“:null}}}}

Um den oben genannten Fehler zu beheben und im Backend ebenfalls alle Beiträge anzuzeigen, entfernen wir die Limitierung der REST API. Folgender Code gehört ebenfalls in die functions.php.

Der Code hebt das Limit für Pages, Posts und Custom Post Types auf. Verwendet nur, was tatsächlich notwendig ist.

/**
 * Increase REST API limit per_page for specific post types
 */

function kb_increase_per_page_max($params) {
    global $max_posts;
    $params['per_page']['maximum'] = $max_posts;
    return $params;
}

// posts
add_filter('rest_post_collection_params', 'kb_increase_per_page_max');

// pages
add_filter('rest_page_collection_params', 'kb_increase_per_page_max');

// custom post types (replace KB_CUSTOM with your post type)
add_filter('rest_KB_CUSTOM_collection_params', 'kb_increase_per_page_max');

Anschließend sollte der neue Query-Loop-Block sowohl im Backend als auch im Frontend bis zu 200 Beiträge anzeigen. Je nachdem, welche Attribute des WP_Query() in der Variation überschrieben werden, steht im Backend weiterhin das 100er-Limit. Es werden allerdings trotzdem mehr als 100 Ergebnisse angezeigt.

Geschrieben von:

Jonas Hellwig

Benutzerbild

Jonas ist Gründer der Agentur kulturbanause und des kulturbanause Blogs. Er arbeitet an der Schnittstelle zwischen UX/UI Design, Frontend und Redaktion und hat zahlreiche Fachbücher und Video-Trainings veröffentlicht. Jonas Hellwig ist regelmäßig als Sprecher auf Fachveranstaltungen anzutreffen und unterstützt mit Seminaren und Workshops Agenturen und Unternehmen bei der Planung, der Gestaltung und der technischen Umsetzung von Web-Projekten.

Jonas Hellwig bei Xing

Feedback & Ergänzungen – Schreibe einen Kommentar

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

WordPress-Projekte mit kulturbanause

Wir wissen wovon wir reden. Wir setzen WordPress seit über 10 Jahren erfolgreich ein und realisieren maßgeschneiderte Websites auf Basis dieses großartigen CMS.

WordPress-Leistungsangebot →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Schulung + Beratung