J'ai un type de message personnalisé appelé video
. Voudrais paginer sa page d’archive, montrant seulement 3 posts sur chaque page.
Il existe également une boucle personnalisée sur la page d’archive qui génère all les publications vidéo (pour une galerie de vignettes).
C'est le archive-video.php
:
<?php while( have_posts() ) : the_post(); ?>
MAIN LOOP...
<?php endwhile; wp_reset_query(); ?>
<?php next_posts_link(); previous_posts_link(); >
<?php $custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
<?php while ( $custom_loop->have_posts() ) : $custom_loop->the_post(); ?>
CUSTOM LOOP...
<?php endwhile; ?>
J'ai essayé de régler le posts_per_page
à 3 avec pre_get_posts
(code ici) . La pagination fonctionnerait parfaitement, mais la boucle personnalisée ne génère plus que 3 posts et pas tous les posts!
Quelqu'un avec une solution codée en dur/sans plugin? Ont été googler en vain ... Tout conseil/aide serait très apprécié !!!
Le code dans le lien que vous avez posté (en utilisant pre_get_posts
) changera toujours le nombre de posts_per_page à 3 si vous interrogez des publications de ce type. Donc, une meilleure solution serait de ne pas utiliser ce code et simplement au-dessus de votre code, avant:
<?php while( have_posts() ) : the_post(); ?>
ajouter:
if ( get_query_var('paged') )
$paged = get_query_var('paged');
elseif ( get_query_var('page') )
$paged = get_query_var('page');
else
$paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));
et cela n'affectera que cette requête et pas toutes les requêtes de ce type de publication.
Mettre à jour:
la structure de votre code devrait ressembler à ceci:
if ( get_query_var('paged') )
$paged = get_query_var('paged');
elseif ( get_query_var('page') )
$paged = get_query_var('page');
else
$paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));
while( have_posts() ) : the_post();
//MAIN LOOP...
endwhile; wp_reset_query();
next_posts_link(); previous_posts_link();
$custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
while ( $custom_loop->have_posts() ) : $custom_loop->the_post();
//CUSTOM LOOP...
endwhile;
wp_reset_query();
Essayez 'paged' => $paged,
après new WP_Query( array('post_type' => 'video',
et remplacez 'posts_per_page' => '-1'
par 'posts_per_page' => '3'
.
J'utiliserais le hook pre_get_posts
dans votre cas et je filtrerais la requête principale. Ajoutez le code suivant à votre functions.php
add_action( 'pre_get_posts', function ( $query ) {
if ( $query->is_post_type_archive( 'video' ) && $query->is_main_query() && ! is_admin() ) {
$query->set( 'posts_per_page', 3 );
}
} );
J'espère que cela t'aides!