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

space 3197611 1920
Bildquelle: Pixabay, darkmoon1968

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

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable