Ma requête d'archive contient une publication personnalisée posts_per_page, order, orderby, post_type et paginée (via wp-pageNavi).
array (
'order' => 'DESC',
'orderby' => 'title',
'paged' => 1,
'post_type' => Array (
'post',
'cust_article',
),
'posts_per_page' => 15,
);
Mon post_type contient 'post' et 'cust_article'.
J'ai 1 'post' et 65 'cust_article'. posts_per_page est actuellement défini sur 5 dans admin.
Mon problème est que le nombre maximum de pages est limité par le nombre de pages que contient 'post'. Comme je n’ai qu’un "post", les pages sont limitées à 1, même si toutes les pages sont affichées (5 pages, posts_per_page définies sur 15), les pages autres que la page 1 renverront 404.
La création d'un second 'post' et le réglage de posts_per_page sur 1 permettent d'accéder à la deuxième page. Les pages suivantes renvoient également 404.
J'utilise la même requête pour mes archives post_type personnalisées, avec un seul post_type. Ajouter une seconde à la requête crée la même erreur.
Je sais que la pagination est limitée par le nombre de publications et par l'option définie posts_per_page. 5 ppp et 21 posts => maximum de 5 pages
Selon la théorie, les posts de 2 post_types devraient prolonger le nombre de posts. 5 ppp et 21 posts + 12 posts => 7 pages maximum
Milo a raison, vous devriez utiliser pre_get_posts
au lieu d'appeler une seconde requête à la charge. Cela facilitera beaucoup la pagination. Quelle que soit la commande que vous utilisez, la session doit toujours être accessible. Le code pour le faire est assez simple aussi, cela ressemblerait à ceci:
/**
* 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' );
Cela modifiera la requête principale avant qu'elle ne frappe la base de données. Sinon, WordPress obtiendra la requête naturelle, frappez votre WP_Query personnalisé et envoyez à nouveau un ping à la base de données, ce qui est une surcharge inutile.