web-dev-qa-db-fra.com

Afficher l'extrait pour le premier message seulement dans la requête

J'aimerais afficher uniquement l'extrait du premier message de ma requête principale. Je me demandais quelle était la meilleure façon de procéder.

Ce que j'ai essayé jusqu'à présent c'est:

  1. Créer une page d'accueil personnalisée et utiliser deux requêtes, une qui renvoie 1 message avec un extrait et une autre qui renvoie des messages sans.
  2. Tout en utilisant les requêtes par défaut, mais en utilisant css pour masquer les extraits de toutes les publications sauf la première, en utilisant nth-child.

Les deux fonctionnent assez bien, mais je me demandais s'il y avait une meilleure façon de le faire, via une fonction ou un filtre.

Merci!

1
justinw

Vous pouvez utiliser $wp_query->current_post dans votre boucle pour vérifier la publication actuelle. Vous n'avez pas besoin de deux boucles, on fera l'affaire Si vous avez besoin d'extrait pour le premier post seulement, vous pouvez faire quelque chose comme ça. Rappelez-vous simplement que le premier message de la boucle est 0, et non 1

if ( !$wp_query->current_post > 0 ) :
   the_excerpt();
else :
   <--- DO SOMETHING ELSE FOR OTHER POSTS
endif;

Pour toutes les variables membres WP_Post , vérifiez le lien fourni à partir du codex.

3
Pieter Goosen

Vous pouvez le définir avec un compteur. En utilisant la boucle par défaut comme exemple:

<?php
  $firstExcerpt = 0; // Set the variable to 0 so we can check for it later.
  if ( have_posts() ) : while ( have_posts() ) : the_post();
?>

  <h2><?php the_title(); ?></h2>
  <?php
    if ($firstExcerpt < 1) { // Check if it's been displayed
      the_excerpt();
      $firstExcerpt++; // Changes the variable so that next time, it won't show
    };
  ?>

<?php endwhile; endif; ?>
2
Arkuen

Qu'en est-il de quelque chose de simple comme:

$i = 1;
if( have_posts() ) {
    while( have_posts() ) {
        the_post();
        if( 1 == $i ) {
            the_excerpt();
        }
       // the rest of your loop
       $i++;
    }
}
1
Pat J