(Custom) Post Types | (Custom) Taxonomies | Hooks und Filter | Kunden und Leser | Queries

Post Type Archive Custom Query: Pagination funktioniert ab Seite 6 nicht mehr

space 3197611 1920

Die Anzahl berechneter Seiten ist bei 6 Einträge pro Seite mit 8 korrekt, und die mit paginate_links generierte Paginierung entspricht dem. Bis Seite 5 werden mir auch die richtigen Einträge angezeigt. Ab Seite 6 allerdings erhalte ich nur noch 404-Meldungen.

Da es sich um ein Post Type Archiv handelt, würde auch the_posts_pagination funktionieren. Das zeigt von vornherein nur 5 Seiten an, die allerdings dieselben und korrekt gezählten Ergebnisse anzeigen wie paginate_links. Die Posts die auf den letzten drei Seiten kommen sollten, werden einfach “verschluckt”.

Das Verflixte an den Paginierungen bei Custom Post Types, Taxonomies oder Custom Queries ist, dass die Berechnungen teilweise stimmen, und teilweise nicht. Zum Beispiel erhält man die richtige Anzahl von Beiträgen und der erste Beitrag auf Seite zwei ist der 7. Beitrag. Es wird also keiner ausgelassen. Auf den 5 funktionierenden Seiten kommen die jeweils zu erwartenden Beiträge. Was ab Seite 6 kommen sollte verschwindet jedoch im 404. Verwirrungen wegen nicht gefunden-Fehlern im Zusammenhang mit Paginierungen kommen daher häufig vor, und haben mich in der Vergangenheit mehr als einmal ins Tüfteln gebracht.

Grund dafür ist in diesem Fall, dass in den WordPress-Einstellungen unter Lesen die festgelegte Anzahl für Blogseiten zeigen maximal mit 10 höher ist, als die Anzahl der Beiträge im Archiv (wäre sie niedriger oder gleich, würde sich das nicht auswirken). Die Seitenanzahl die the_posts_pagination wiedergibt entspricht dieser Einstellung. Die angezeigten Beiträge entsprechen hingegen dem posts_per_page-Parameter in den Custom Query Argumenten – soweit die Standard-Paginierung reicht.

Maßnahmen

entweder 1. pre_get_posts

function custom_number_of_news($query) { if ( $query->is_main_query() && !is_admin() ) { if ( $query->is_tax('news_tags') || $query->is_tax('news_category') || $query->is_post_type_archive('news') ) { $query->set( 'posts_per_page', 6 ); } } } add_action( 'pre_get_posts', 'custom_number_of_news' );

oder 2. parse_query

function custom_number_of_news($query) { if ( is_admin() ) return; if ( $query->is_tax('news_tags') || $query->is_tax('news_category') || $query->is_post_type_archive('news') ) { $query->set( 'posts_per_page', 6 ); } } add_action( 'parse_query', 'custom_number_of_news' );

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.