Mostrare la miniatura solo sul primo post nel loop?

25 mar 2011, 09:46:52
Visualizzazioni: 17.3K
Voti: 3

Qual è il modo migliore per usare <?php the_post_thumbnail();?> nel mio loop MA mostrare la miniatura solo sul PRIMO post? Cioè, solo il primo post nel loop avrà la sua immagine visualizzata?

Ecco un esempio di loop che mostra l'immagine per TUTTI i post:

<!-- Inizia il Loop. -->
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Visualizza il Titolo come link al permalink del Post. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Link permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Visualizza la miniatura dell'immagine del post -->
<?php the_post_thumbnail();?>
 <!-- Visualizza la data e un link ad altri post dello stesso autore. -->
 <small><?php the_time('F jS, Y') ?> di <?php the_author_posts_link() ?></small>
 <!-- Visualizza il Contenuto del Post in un div. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>

Grazie!

0
Tutte le risposte alla domanda 4
1
13
  • aggiungi una variabile prima del ciclo (prima del while), ad esempio $first = true;
  • aggiungi un controllo all'interno del ciclo per questa variabile
  • dopo l'uso, modifica il flag

Codice:

<!-- Inizia il Loop. -->
 <?php $first = true; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Mostra il Titolo come link al permalink del Post. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Link Permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Mostra l'immagine in miniatura del post -->
    <?php if ( $first ): ?>
      <?php the_post_thumbnail();?>
      <?php $first = false; ?>
    <?php endif; ?>
 <!-- Mostra la data e un link agli altri post di questo autore. -->
 <small><?php the_time('F jS, Y') ?> di <?php the_author_posts_link() ?></small>
 <!-- Mostra il Contenuto del Post in un div box. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
25 mar 2011 10:05:53
Commenti

Ho scelto questa soluzione perché l'ho trovata la più elegante e facile da comprendere. Grazie per la risposta.

OneFishTaco OneFishTaco
25 mar 2011 21:33:55
2

Questo codice nel tuo template mostrerà l'immagine in evidenza solo per il primo articolo:

<?php 
    ! isset ( $loop_first ) and the_post_thumbnail();
    $loop_first = 1;
?>
25 mar 2011 10:00:20
Commenti

Grazie per la risposta. Non dovresti impostare $loop_first=0 o qualcosa del genere dopo?

OneFishTaco OneFishTaco
25 mar 2011 21:34:50

@Pwn, La funzione isset() ti evita di dover creare una variabile prima.

fuxia fuxia
26 mar 2011 00:58:13
1

Questo è ciò che utilizzo nei miei progetti e funziona bene per me. Ho modificato il codice che hai fornito per adattarlo. Basta inserirlo e mostrerà la miniatura del post solo per il primo articolo.

<!-- Inizia il Loop. -->
 <?php $i = 1 ; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Mostra il Titolo come link al permalink del Post. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Link permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?php if ($i == 1): ?>
<!-- Mostra la miniatura dell'immagine del post -->
<?php the_post_thumbnail();?>
<?php endif; ?>
 <!-- Mostra la data e un link agli altri post dello stesso autore. -->
 <small><?php the_time('j F Y') ?> di <?php the_author_posts_link() ?></small>
 <!-- Mostra il Contenuto del Post in un box div. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
<?php $i++; endwhile; endif; ?>
25 mar 2011 13:00:41
Commenti

Sì, sembra che anche quella soluzione funzionerebbe bene. Ho optato per la soluzione precedente perché l'ho trovata più semplice da utilizzare. Grazie per il tuo tempo, saluti

OneFishTaco OneFishTaco
25 mar 2011 21:37:50
0

Basta controllare il valore current_post

global $wp_query; // ottieni la query globale - funziona anche con query personalizzate
if(0 == $wp_query->current_post){ /**è il primo post**/ }
20 ott 2017 22:31:37