Meine Archivabfrage enthält eine benutzerdefinierte posts_per_page, order, orderby, post_type und paged (via wp-pageNavi).
array (
'order' => 'DESC',
'orderby' => 'title',
'paged' => 1,
'post_type' => Array (
'post',
'cust_article',
),
'posts_per_page' => 15,
);
Mein post_type enthält 'post' und 'cust_article'.
Ich habe 1 'Post' und 65 'Cust_article'. posts_per_page ist derzeit in admin auf 5 gesetzt.
Mein Problem ist, dass die maximale Anzahl der Seiten durch die Anzahl der Seiten begrenzt ist, die 'post' enthält. Da ich nur einen "Post" habe, sind die Seiten auf 1 beschränkt, obwohl alle Seiten angezeigt werden (5 Seiten, posts_per_page auf 15 gesetzt). Andere Seiten als Seite 1 geben 404 zurück.
Wenn Sie einen zweiten "Beitrag" erstellen und posts_per_page auf 1 setzen, können Sie auf die zweite Seite zugreifen. Auf den folgenden Seiten wird ebenfalls 404 zurückgegeben.
Ich verwende dieselbe Abfrage für meine benutzerdefinierten post_type-Archive, wobei ein einziger post_type den gleichen Fehler verursacht, wenn der Abfrage eine Sekunde hinzugefügt wird.
Ich weiß, dass das Paging durch die Anzahl der Posts und die eingestellte Option posts_per_page begrenzt ist. 5 Seiten pro Person und 21 Beiträge => maximal 5 Seiten
Theoretisch sollten Posts von 2 post_types die Anzahl der Posts erhöhen. 5ppp und 21 posts + 12 posts => max 7 pages
Milo hat recht, Sie sollten pre_get_posts
verwenden, anstatt beim Laden eine zweite Abfrage aufzurufen. Dies erleichtert das Blättern erheblich. Unabhängig davon, welche Orderby-Sitzung Sie verwenden, sollte diese weiterhin im Hook verfügbar sein. Der Code dafür ist ebenfalls recht einfach und sieht folgendermaßen aus:
/**
* Modify the query before it gets loaded
*
* @param WP_Query Object $query
*
* @return void
*/
function wpse_228230( $query ) {
if( $query->is_admin ) {
return;
}
// Your archive conditional here
if( is_post_type_archive() ) {
$query->set( 'post_type', array( 'post', 'cust_article' ) );
$query->set( 'posts_per_page', 15 );
$query->set( 'orderby', array( 'title' => 'DESC' ) );
}
}
add_action( 'pre_get_posts', 'wpse_228230' );
Dadurch wird die Hauptabfrage geändert, bevor sie die Datenbank erreicht. Andernfalls wird WordPress die natürliche Abfrage erhalten, Ihre benutzerdefinierte WP_Query treffen und die Datenbank erneut pingen, was unnötigen Aufwand bedeutet.