Выделить первый пост в цикле
Может возникнуть необходимость выделения особым образом первого поста в цикле (например, когда нужно сделать совершенно другой дизайн в отличие от остальных постов), будь то главная страница, страница архивов, поиска и т.д. Такая задача решается путем добавления специального 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, переопределить стили для первого поста.
—–
На сайте “из рук в руки” публикуются бесплатные частные и коммерческие объявления. Здесь вы можете добавить объявление, если вам нужно что-либо продать или купить, и его увидит большая аудитория.
А если заменить $i == 1 на $i == 2 . это будет справедливо для первых 2 записей ? то есть они будут обе одинакового стиля а другие своего стиля, и никакого дубляжа контента?
Нет, не так. Цифра – это порядковый номер записи на странице. Т.е. если смените на 2, то оформлением будет отличаться только вторая запись.
А )) ясно . А можно сделать чтобы не одна, а первых 2 записи отличались от всех ?
Можно, конечно. В скобках тогда будет следующее:
$i < 3Супер )) Спасибо большое ! как сделаю отпишусь, если не забуду ))
Я испытал )) сначала были трудности но когда все обдумал и обмозговал чего куда убрать и остальное – Все заработало ))) спасибо огромное!!
Если статей много, то на каждой из страниц (страница x из y) будет выделяться первый пост. Может имеет смысл вставить проверку is_home()?
Верно. (я просто попробовал но было пару записей на одну страницу, на второй странице не смотрел), Однако имеет место выражение что home – не есть страница записей (блоговая). Например главная страница одна, а посты на другой. Я изначально хотел чтобы несколько первых записей отличались от остальных, так сказать было видно что новое в блоге.
Все таки
is_home(). Андрей – все правильно сказал. (я посмотрел на оф. сайте условные теги)На практике всё-таки оказалось не is_home(), а is_paged(). То есть если это уже не первая страница, то пост не выделяем.
А как тогда будет выглядеть конечный код если мой код вывода записи следующий :
<div class="content<?php if ($i ">
<a href="">
Заранее спасибо
Блин. прошлый комментарий не вывел весь код. Короче такой же самый код как дает автор за исключением $i < 3 . Куда и как вставить is_page() ?
Обращаю Ваше внимание, что не 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) , потому что иначе у меня выдавал синтаксическую ошибку.
Ок. Все нужно проверять на практике. В том числе и свои советы. ;)
А я и проверил ))
Спасибо, очень помогло. Вначале немного не понял потому, что в 3.1 все немного поменялось и loop разбросали по четырем файлам, но в итоге разобрался =)