web-dev-qa-db-fra.com

Masquer l'article en vedette sur la deuxième page

J'ai un index.php avec un article en vedette et un certain nombre d'autres articles et le wp_pagenavi standard au bas.

J'utilise les 2 boucles du codex wordpress comme ceci:

<?php $my_query = new WP_Query('category_name=featured&posts_per_page=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID;?>
  <!-- Do stuff... -->
<?php endwhile; ?>
  <!-- Do other stuff... -->
<?php if (have_posts()) : while (have_posts()) : the_post(); 
if( $post->ID == $do_not_duplicate ) continue; ?>
 <!-- Do stuff... -->
<?php endwhile; endif; ?>

Si j'ai bien lu la hiérarchie des thèmes, une page archive.php doit être utilisée lorsque vous cliquez sur "Précédent" dans la section de pagination ... (correct?)

Cependant, ce n'est pas le cas, cliquer sur précédent me montre une page avec la même mise en page que mon index.php et donc avec le même message en vedette. (la pagination sur les autres postes fonctionne bien)

J'ai déconné avec is_paged mais je n'ai pas réussi à le faire fonctionner ... Merci pour l'aide!

1
Jan Henckens

En bref non - le modèle utilisé est basé sur la requête et lors de la pagination, vous répétez essentiellement la même requête, mais pour une page différente. En général, le modèle sera le même.

archive.php peut être utilisé pour la plupart des requêtes, mais il existe souvent des modèles préférables (par exemple, modèles de catégorie, modèles de tag, modèles d'auteur, etc.). Ce qui est préférable est déterminé par la hiérarchie de modèles . Cependant, pour la page d'accueil, index.php est souvent utilisé et le modèle persistera avec la pagination.

Pour n’afficher que quelque chose sur la 'page 1', vous pouvez essayer ce qui suit:

<?php 
 //initialize $do_not_duplicate
 $do_not_duplicate=0;
 //is_paged returns true if we are on page 2,3,...
 if(!is_paged()):
      //Get featured content for page 1
      $my_query = new WP_Query('category_name=featured&posts_per_page=1');
      while ($my_query->have_posts()) : $my_query->the_post();
           $do_not_duplicate = $post->ID;
           //Do stuff...
      endwhile;
 endif;

 //Display rest of content
 if (have_posts()) : 
    while (have_posts()) : the_post(); 
         if( $post->ID == $do_not_duplicate ) continue;
         //Do stuff
    endwhile; 
  endif; 
 ?>

Non testé

1
Stephen Harris

is_paged est juste une fonction booléenne si la liste a plusieurs pages ou non.

Ce dont vous avez besoin est: $wp_query->query_vars['paged']. Entourez votre code postal avec,

global $wp_query;
if ( !isset($wp_query->query_vars['paged']) || $wp_query->query_vars['paged'] == 1 ) :
# Featured post code
endif;

Je pense que ça va faire l'affaire pour vous.

0
Matthew Boynes

Facile: WP a eu beaucoup à faire pour cela. Aucun accès direct à un tableau ou à un objet n'est nécessaire.

// Before the loop
$paged = get_query_var( 'paged' );

// In the loop
if ( 
    ( ! isset( $paged )  OR ! $paged )
    AND is_sticky( get_the_ID() )
{
    // do stuff
}
0
kaiser

Ajoutez cette instruction conditionnelle dans votre fonction personnalisée.

if ( is_home() && get_query_var( 'paged' ) >= 2 ) 
0
Brad Dalton