Page d'archive de type de message personnalisé: Définir les messages par page, Paginer

4

J'ai un type de message personnalisé appelé video . Aimerait paginer sa page d’archive en affichant seulement 3 articles sur chaque page.

Il existe également une boucle personnalisée sur la page d'archivage qui génère tous les publications vidéo (pour une galerie de vignettes).

Ceci 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 définir le posts_per_page sur 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? Googling en vain ... Tout conseil / aide serait très apprécié !!!

    
posée asymptote 27.06.2011 - 13:58

3 réponses

4

Le code dans le lien que vous avez publié (à l'aide de 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.

Mise à 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(); 
    
réponse donnée Bainternet 27.06.2011 - 14:37
1

Essayez 'paged' => $paged, après new WP_Query( array('post_type' => 'video', et remplacez 'posts_per_page' => '-1' par 'posts_per_page' => '3'

    
réponse donnée MartinJJ 27.06.2011 - 14:12
0

J'utiliserais le pre_get_posts hook 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 aide!

    
réponse donnée Robert Bokori 10.02.2017 - 00:48

Lire d'autres questions sur les étiquettes