J'ai besoin d'avoir un nombre différent de messages par page sur la première page que sur les autres pages.
Par exemple, c'est ce dont j'ai besoin
- Nombre total de messages: 6
- Première page: affichage de 3 messages
- Page suivante: affichage de 2 articles par page
Voici mon code:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$fp_limit = 3; // first page limit
$limit = 2; // following page limit
$offset = 0; // default offset
if( $paged == 1 ) {
$limit = $fp_limit;
} else {
$offset = $fp_limit + ( ($paged - 2) * $limit );
}
$args = array(
'post_type' => 'my_post_type',
'post_status' => 'publish',
'offset' => $offset,
'posts_per_page' => $limit,
'caller_ get_ posts' => -1, // remove sticky post
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'my_taxo',
'field' => 'slug',
'terms' => array('slug1', 'slug2', 'slug3')
)
)
);
$my_query = null;
$my_query = new WP_Query($args);
// basic loop
if( $my_query->have_posts() ) :
while ($my_query->have_posts()) : $my_query->the_post();
...
endwhile; endif; // archive loop
if (function_exists('wp_pagenavi')){ wp_pagenavi( array( 'query' => $my_query ) ); }
wp_reset_query();
À la première page des archives, ce code suppose:
Eh bien, 6 publications au total et 3 publications par page. J'ai donc besoin de 2 pages d'archives et la pagination que je vous présente est:
[1] [2]
Cependant, toute autre page d'archive que le code suppose:
Eh bien, 6 publications au total et 2 publications par page. J'ai donc besoin de 3 pages d'archives et la pagination que je vous présente est:
[1] [2] [3]
Besoin d'un peu d'aide pour résoudre ce problème.
custom-post-types
loop
pagination
norixxx
la source
la source
'caller_ get_ posts'
contient des espaces et n'est pas valide. Deuxièmement, il est obsolète. Utilisezignore_sticky_posts
plutôt.Réponses:
MODIFICATION - RÉPONSE REVISITÉE
J'ai travaillé sur une autre solution qui est en fait mieux la réponse originale. Cela n'implique aucune requête personnalisée et je pense qu'à toutes fins utiles, ma réponse d'origine peut être supprimée mais conservée à des fins d'information
Je pense toujours que vous êtes sur la page d'accueil et que vous le traiterez également comme tel. Voici donc ma nouvelle solution
ÉTAPE 1
Supprimez la requête personnalisée de la page d'accueil et remplacez-la par la boucle par défaut
ÉTAPE 2
Utilisez
pre_get_posts
pour modifier la requête principale pour ajouter votre taxonomie personnalisée à la requête principale à afficher sur la page d'accueil.ÉTAPE 3
Maintenant, obtenez l'
posts_per_page
option définie à partir du back-end (qui je suppose est 2) et définissez également laoffset
que nous allons utiliser. Ce sera1
comme vous aurez besoin de 3 messages sur la première page et 2 sur le resteÉTAPE 4
Sur la première page, vous devrez ajouter le
offset
àposts_per_page
ajoutera jusqu'à 3 pour obtenir vos trois messages sur la première page.ÉTAPE 5
Vous devez appliquer votre
offset
à toutes les pages suivantes, sinon vous obtiendrez une répétition du dernier message de la page sur la page suivanteÉTAPE 6
Enfin, vous devez soustraire votre décalage
found_posts
sinon votre pagination sur la dernière page sera erronée et vous donnera une404
erreur car le dernier message sera manquant en raison du nombre de messages incorrectREMARQUE: ce morceau de code a rompu la pagination sur la page de recherche. Ceci est maintenant corrigé, voir le code mis à jour
TOUS ENSEMBLE
Voici à quoi ressemblera votre requête complète qui devrait aller dans functions.php
la source
Je sais que cela date d'il y a 1000 ans, mais une autre solution pour quiconque cherche cette solution tout en utilisant une requête personnalisée, voici comment le faire. Dans cet exemple, la 1ère page avait besoin de 10 publications et chaque page suivante en avait besoin de 9.
puis dans le tableau, utilisez ceci:
Vous êtes maintenant prêt à partir.
la source