Отображение миниатюры только для самого первого поста в цикле?

25 мар. 2011 г., 09:46:52
Просмотры: 17.3K
Голосов: 3

Как лучше всего использовать <?php the_post_thumbnail();?> в моем цикле, НО показывать миниатюру ТОЛЬКО для ПЕРВОГО поста? То есть, чтобы изображение отображалось только у первого поста в цикле?

Вот пример цикла, который показывает изображение для ВСЕХ постов:

<!-- Начало цикла. -->
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Вывод заголовка как ссылки на постоянную ссылку поста. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Вывод миниатюры поста -->
<?php the_post_thumbnail();?>
 <!-- Вывод даты и ссылки на другие посты этого автора. -->
 <small><?php the_time('F jS, Y') ?> от <?php the_author_posts_link() ?></small>
 <!-- Вывод содержимого поста в div-блоке. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>

Спасибо!

0
Все ответы на вопрос 4
1
13
  • добавьте переменную перед циклом (до while), например $first = true;
  • добавьте проверку внутри цикла для этой переменной
  • после использования измените флаг

Код:

<!-- Начало цикла. -->
 <?php $first = true; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Выводим заголовок как ссылку на постоянную ссылку записи. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<!-- Выводим миниатюру изображения для записи -->
    <?php if ( $first ): ?>
      <?php the_post_thumbnail();?>
      <?php $first = false; ?>
    <?php endif; ?>
 <!-- Выводим дату и ссылку на другие записи этого автора. -->
 <small><?php the_time('F jS, Y') ?> от <?php the_author_posts_link() ?></small>
 <!-- Выводим содержимое записи в div блоке. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
25 мар. 2011 г. 10:05:53
Комментарии

Я выбрал это решение, так как нашел его наиболее элегантным и простым для понимания. Спасибо за ответ.

OneFishTaco OneFishTaco
25 мар. 2011 г. 21:33:55
2

Этот код в вашем шаблоне будет отображать миниатюру записи только для первой записи:

<?php 
    ! isset ( $loop_first ) and the_post_thumbnail();
    $loop_first = 1;
?>
25 мар. 2011 г. 10:00:20
Комментарии

Спасибо за ответ. Не нужно ли после этого установить $loop_first=0 или что-то подобное?

OneFishTaco OneFishTaco
25 мар. 2011 г. 21:34:50

@Pwn, Функция isset() избавляет от необходимости сначала создавать переменную.

fuxia fuxia
26 мар. 2011 г. 00:58:13
1

Вот что я использую в своих проектах, и это хорошо работает для меня. Я модифицировал предоставленный вами код, чтобы он подходил. Просто вставьте его, и он будет отображать миниатюру записи только для первой записи.

<!-- Начало цикла. -->
 <?php $i = 1 ; ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <!-- Отображение заголовка как ссылки на постоянную ссылку записи. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?php if ($i == 1): ?>
<!-- Отображение миниатюры изображения для записи -->
<?php the_post_thumbnail();?>
<?php endif; ?>
 <!-- Отображение даты и ссылки на другие записи этого автора. -->
 <small><?php the_time('F jS, Y') ?> от <?php the_author_posts_link() ?></small>
 <!-- Отображение содержимого записи в div-блоке. -->
 <div class="entry">
   <?php the_content(); ?>
 </div>
<?php $i++; endwhile; endif; ?>
25 мар. 2011 г. 13:00:41
Комментарии

Да, это решение тоже выглядит работоспособным. Я выбрал приведённое выше решение, потому что оно показалось мне проще в использовании. Спасибо за уделенное время, всего хорошего

OneFishTaco OneFishTaco
25 мар. 2011 г. 21:37:50
0

Просто проверьте значение current_post

global $wp_query; // получаем глобальный запрос - работает и в пользовательских запросах
if(0 == $wp_query->current_post){ /**это первая запись**/ }
20 окт. 2017 г. 22:31:37