Выделить первый пост в цикле

27 июля 2009 г.

Может возникнуть необходимость выделения особым образом первого поста в цикле (например, когда нужно сделать совершенно другой дизайн в отличие от остальных постов), будь то главная страница, страница архивов, поиска и т.д. Такая задача решается путем добавления специального CSS-класса с помощью несложного PHP-кода.

Первоначально имеем примерно такой стандартный цикл вывода наших постов:

<?php if (have_posts()) : ?>
	<?php while (have_posts()) : the_post(); ?>

		<div class="post">
			...
		</div>

	<?php endwhile; ?>
<?php endif; ?>

Чтобы сменить оформление первого поста с помощью CSS, добавим к нему класс first. Код цикла примет следующий вид:

<?php $i = 0; ?>
<?php if (have_posts()) : ?>
	<?php while (have_posts()) : the_post(); ?>
	<?php $i++ ?>

		<div class="post<?php if ($i == 1) echo ' first'; ?>">
			...
		</div>

	<?php endwhile; ?>
<?php endif; ?>

Вот и все. Теперь, остается, используя класс first, переопределить стили для первого поста.

—–
На сайте “из рук в руки” публикуются бесплатные частные и коммерческие объявления. Здесь вы можете добавить объявление, если вам нужно что-либо продать или купить, и его увидит большая аудитория.

  5 Мне понравилось!

Koммeнтapии (18):

  1. А если заменить $i == 1 на $i == 2 . это будет справедливо для первых 2 записей ? то есть они будут обе одинакового стиля а другие своего стиля, и никакого дубляжа контента?

    • Нет, не так. Цифра – это порядковый номер записи на странице. Т.е. если смените на 2, то оформлением будет отличаться только вторая запись.

  2. А )) ясно . А можно сделать чтобы не одна, а первых 2 записи отличались от всех ?

  3. Если статей много, то на каждой из страниц (страница x из y) будет выделяться первый пост. Может имеет смысл вставить проверку is_home()?

    • Верно. (я просто попробовал но было пару записей на одну страницу, на второй странице не смотрел), Однако имеет место выражение что home – не есть страница записей (блоговая). Например главная страница одна, а посты на другой. Я изначально хотел чтобы несколько первых записей отличались от остальных, так сказать было видно что новое в блоге.

  4. Все таки is_home() . Андрей – все правильно сказал. (я посмотрел на оф. сайте условные теги)

  5. На практике всё-таки оказалось не is_home(), а is_paged(). То есть если это уже не первая страница, то пост не выделяем.

  6. А как тогда будет выглядеть конечный код если мой код вывода записи следующий :

    <div class="content<?php if ($i ">

    <a href="">

    Заранее спасибо

  7. Блин. прошлый комментарий не вывел весь код. Короче такой же самый код как дает автор за исключением $i < 3 . Куда и как вставить is_page() ?

  8. Обращаю Ваше внимание, что не is_page(), а is_paged(). Думаю, что просто в условие добавить логическое “и” ($i == 1)&& (is_paged() == false). То есть пост = 1 и страница не перелистнута.

    • Andrey, спасибо – помогло. вроде теперь на других страницах не выделяет. Но если ставить if ($i == 1)&&(is_paged() == false) echo ‘ first’ – у меня выдал синтаксическую ошибку. я написал так : if ($i < 3 and is_paged() == false) echo ' first' .

    • Andrey, все работает – спасибо! только будет ($i == 1 and is_paged() == false) , потому что иначе у меня выдавал синтаксическую ошибку.

  9. Ок. Все нужно проверять на практике. В том числе и свои советы. ;)

  10. Спасибо, очень помогло. Вначале немного не понял потому, что в 3.1 все немного поменялось и loop разбросали по четырем файлам, но в итоге разобрался =)

Oтпpaвить кoммeнтapий

Облако тегов