WordPress: WP_Query mit Pagination

Wenn ihr in WordPress einen individuellen Loop mit Pagination erstellen wollt, kommt es leicht zu einer fehlerhaften Berechnung der Seitenzahlen. Das Problem hängt häufig mit dem Argument posts_per_page innerhalb eines WP_Query zusammen. In diesem Beitrag archivieren wir ein Snippet das die fehlerhafte Berechnung korrigiert, und es euch ermöglicht, die Anzahl der dargestellten Beiträge sowohl über den Code als auch über das Backend zu steuern.

Problem mit Pagination im WP_Query beheben

Um mögliche Probleme mit einer fehlerhaften Berechnung der Pagination im WP_Query zu beheben, benötigt ihr drei Argumente, die in Variablen ausgelagert werden. In unserem Fall sind das die Variablen $paged, $offset und $count.

$paged
Die Variable $paged gibt an, auf welcher Seite der Pagination sich der Anwender befindet.
$count
Die Variable $count legt fest, wie viele Beiträge pro Seite angezeigt werden sollen. Es kann entweder eine Zahl oder die Angabe get_option('posts_per_page', $default) zugewiesen werden. Letzteres liefert die im Backend unter »Einstellungen → Lesen« eingestellte Zahl. Die »10« im Code-Beispiel steht für den Standardwert ($default). Weitere Details zu get_option erfahrt ihr im WordPress Codex.
$offset
Mit der Variable $offset berechnet ihr, um wie viele Beiträge der Loop verschoben werden soll.  Da diese Berechnung sich aus den anderen beiden Variablen zusammensetzt, behebt ihr somit die fehlerhafte Berechnung in der Pagination.

Das folgende Snippet für einen benutzerdefinierten Loop mit Pagination kann als Grundlage verwendet werden:

<?php

  $count = get_option('posts_per_page', 10);
  $paged = get_query_var('paged') ? get_query_var('paged') : 1;
  $offset = ($paged - 1) * $count;

  $args = array (
     'posts_per_page' => $count,
     'paged' => $paged,
     'offset' => $offset,
  );

  $kb_custom_query = new WP_Query($args);
      if ($kb_custom_query->have_posts()) :
        while ($kb_custom_query->have_posts()) : $kb_custom_query->the_post();
          the_title();
          the_content();
        endwhile;
          previous_posts_link('Zurück', $kb_custom_query->max_num_pages);
          next_posts_link('Weiter', $kb_custom_query->max_num_pages);
      else :
        // Keine Beiträge gefunden
      endif;

wp_reset_postdata(); ?>

Geschrieben von kulturbanause Team

Benutzerbild

Beiträge bei denen das kulturbanause-Team als Autor angegeben ist, wurden von mehreren Personen in Zusammenarbeit geschrieben. Wir nutzen diesen Blog als öffentliches Archiv und um euch bei alltäglichen Problemen im Zusammenhang mit der Erstellung von Websites zu helfen. Neben diesem Blog bieten wir auch Trainings wie Schulungen, Bücher oder Videos an. Und natürlich unterstützen wir auch gerne im Rahmen unserer Agenturtätigkeit.

Feedback & Ergänzungen – 1 Kommentar

  1. Selma
    schrieb am 08.11.2017 um 16:46 Uhr:

    Sollte man mit the_posts_pagination() die Pagination erzeugen wollen, funktioniert das leider nicht so wirklich.
    Diese Funktion (und eigentlich auch alle anderen Funktionen von WordPress für die Linksnavigation von Beiträgen) bezieht sich immer auf den Main-Query von WordPress. (https://wordpress.stackexchange.com/questions/120407/how-to-fix-pagination-for-custom-loops/120408#120408 -> „Using Custom Query Object for Pagination Functions“)

    Mir ist der Fehler aufgefallen, weil ich durch meinen Custom-Query nicht die gleiche Anzahl von Beiträgen hatte wie im Main-Query und die Navigation eine Seite 3 angezeigt hat, die nicht existiert.

    Antworten

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.

Übersicht Schulungsthemen →