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' );
Schreibe einen Kommentar