Exibe a miniatura apenas no primeiro post do loop?

3

Qual é a melhor maneira de usar <?php the_post_thumbnail();?> no meu loop MAS mostra apenas uma miniatura na primeira postagem? Significado, apenas o primeiro post no loop terá sua imagem mostrada?

Aqui está um exemplo de um loop que mostra a imagem para TODAS as postagens:

<!-- Start the Loop. -->
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Display the Title as a link to the Post's permalink. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Display the posts Image thumbnail for the post -->
<?php the_post_thumbnail();?>
 <!-- Display the date and a link to other posts by this posts author. -->
 <small><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></small>
 <!-- Display the Post's Content in a div box. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>

Obrigado!

    
por Pwn 25.03.2011 / 08:46

4 respostas

12
  • adicione uma variável antes do loop (antes do tempo), por exemplo $ first = true;
  • adicione uma verificação dentro do loop para essa variável
  • após o uso, altere o sinalizador

Código:

<!-- Start the Loop. -->
 <?php $first = true; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Display the Title as a link to the Post's permalink. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Display the posts Image thumbnail for the post -->
    <?php if ( $first ): ?>
      <?php the_post_thumbnail();?>
      <?php $first = false; ?>
    <?php endif; ?>
 <!-- Display the date and a link to other posts by this posts author. -->
 <small><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></small>
 <!-- Display the Post's Content in a div box. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
    
por petermolnar 25.03.2011 / 09:05
4

Este código no seu modelo exibirá a miniatura da postagem apenas para a primeira postagem:

<?php 
    ! isset ( $loop_first ) and the_post_thumbnail();
    $loop_first = 1;
?>
    
por fuxia 25.03.2011 / 09:00
3

Isso é o que eu uso em meus projetos e funciona bem para mim. Eu modifiquei o código que você forneceu para se adequar. Simplesmente solte-o e ele exibirá a miniatura da postagem apenas para a primeira postagem.

<!-- Start the Loop. -->
 <?php $i = 1 ; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Display the Title as a link to the Post's permalink. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?php if ($i == 1): ?>
<!-- Display the posts Image thumbnail for the post -->
<?php the_post_thumbnail();?>
<?php endif; ?>
 <!-- Display the date and a link to other posts by this posts author. -->
 <small><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></small>
 <!-- Display the Post's Content in a div box. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
<?php $i++; endwhile; endif; ?>
    
por Dwayne Charrington 25.03.2011 / 12:00
0

Basta verificar o valor current_post

global $wp_query; // get the global query - works in custom queries too
if(0 == $wp_query->current_post){ /**is the first post**/ }
    
por Maxwell s.c 20.10.2017 / 21:31