Часто при организации множественных циклов WordPress возникает надобность пропустить пост или сделать какое-то действие, например, вывести рекламу между записями. Истину ни для кого не открою, но для новичков информация будет довольно полезна.
Множественный Loop в работе можно посмотреть в журнале ITpride на главной странице, на которой выводятся записи из пяти разных категорий. По сути, так можно легко организовать журнальную, а не блоговую тему.
Пример 1. Выводим несколько записей определённой категории в WordPress
Нужно создать новый запрос к базе с указанием фильтра категории и количеством выводимых записей. Для этого используем код ниже.
cat — указывает нам номер категории, его можно посмотреть тут:
showposts — количество записей, которые мы будет выводить в цикле. Весь код такого цикла (без верстки): Данный код выведет на страницу три записи из категории номер девять.
Пример 2. Выводим рекламный блок между постами блога WordPress.
Дорабатываем наш цикл для вывода рекламного блока после первого поста. Для этого введем ещё одну переменную $ads. Кто не знаком с PHP или далек от программирования, будьте внимательны. В коде каждая точечка важна и переменные у нас начинаются со знака доллар.
Алгоритм простой — перед циклом создаем новую переменную равную нулю. В цикле прибавляем к ней по единице. Сравниваем переменную с единицей, чтобы узнать, что это уже второй пост.
Наш код будет таким:
<?php $recent = new WP_Query(«cat=9&showposts=3″); ?>
<?php if ($recent->have_posts()) : ?>
<?php $ads=0; while ($recent->have_posts()) : $recent->the_post();?>
<a href=»<?php the_permalink();?>» title=»<?php the_title(); ?>»> <?php the_title(); ?></a>
<?php wp_content(); ?>
//сейчас мы сравним переменную с 1 и если равно, то выводим «блок рекламы».
//если нет, то прибавляем ещё 1.
<?php if ($ads==1) echo ‘блок рекламы’; $ads=$ads+1;?>
<?php endwhile;?>
<?php endif;?>
Также прошу обратить внимание на «блок рекламы». В случае вывода блока скриптом то необходимо использовать обратную косую черту для вывода кавычек в код HTML. Например, для кода рекламы Яндекс.Директ в коде нужно внести такие правки:
<script type=\»text/javascript\»>
…
код
…
document.write(‘<sc’+’ript type=\»text/javascript\» src=\»http://an.yandex.ru/system/context.js\»></sc’+’ript>’);
Сам блок выводится командой ECHO.
Пример 3й. Пропускаем пост в множественном цикле WordPress
В этом случае мы тоже используем дополнительную переменную $dup (Вы можете назвать её у себя как удобно).
Задача простая — выводим главный пост дня из категории 9, а затем под ним в одной из колонок, остальные новости категории 9, но пропустив первый пост.
Нам понадобится два цикла WordPress и в самом простом виде они будут такими:
<?php $recent = new WP_Query(«cat=9&showposts=1″); ?>
<?php if ($recent->have_posts()) : ?>
<?php while ($recent->have_posts()) : $recent->the_post(); $dub=$post->ID;?>
<a href=»<?php the_permalink() ?>» title=»<?php the_title(); ?>»><?php the_title(); ?></a>
<?php wp_content(); ?>
<?php endwhile;?>
<?php endif;?>
<?php rewind_posts(); ?>
<?php $recent = new WP_Query(«cat=9&showposts=8″); ?>
<?php if ($recent->have_posts()) : ?>
<?php while ($recent->have_posts()) : $recent->the_post();?>
<?php if($post->ID == $dup) continue;?>
<a href=»<?php the_permalink() ?>» title=»<?php the_title(); ?>»><?php the_title(); ?></a>
<?php wp_content(); ?>
<?php endwhile;?>
<?php endif;?>
Код практически ничем не отличается от стандартного. Мы вводим дополнительную переменную $dub, чтобы запомнить какой пост мы отобразили.
Этот цикл выведет нам 7 записей из категории номер 9 без первого поста, который мы вывели предыдущим циклом. Не забудьте поставить на единицу больше постов в запросе (мы же один пропустим).
Это далеко не все премудрости циклов WordPress, но такие небольшие хитрости добавят функциональности и гибкости Вашей теме. Циклы также можно использовать и в сайдбаре и футере 😉
Типограф сайта иногда портит код, поэтому скачайте все коды одним файлом
10 комментариев
Олег says:
Апр 10, 2011
Спасибо тебе огромное за статью! Давно искал как это реализовать. Только вот с ошибками в коде ты перебарщиваешь. Если человек не сталкивался с php не сможет корректно отредактировать.
Voff says:
Апр 10, 2011
Спс, поправлю, удачи!
Gluppybub says:
Янв 15, 2012
не могу найти рабочий сервис расчета зпл на главбухе не пашет на клерке не пашет подкиньте плз если кто знает п.с. дали линки хз какая-то туфта местный бюджет состоит из
и павел бюро
Voff says:
Янв 15, 2012
Если найду, подкину всенепременно
Алексей says:
Апр 27, 2013
Здравствуйте , у всех работает пример 3? Почему то не работает у меня.
have_posts()) : ?>
have_posts()) : $recent->the_post(); $dub=$post->ID;?>
<a href="» title=»»>
have_posts()) : ?>
have_posts()) : $recent->the_post(); ?>
ID == $dup) continue; ?>
<a href="» title=»»>
Выводит три новости. Первую новость. Затем снова первую и вторую. В итоге 3 вместо двух. Подскажите что не так?
Voff says:
Апр 27, 2013
Спасибо, поправил
Voff says:
Апр 27, 2013
Спасибо, поправил
Алексей says:
Апр 27, 2013
Нашел ошибку. пример 3. в первом loope переменная dub а во втором dup поэтому не работало
Александр says:
Янв 17, 2014
Толку от этого кода, если у вас в рубрике большое кол-во записей и делятся они на страницы
Voff says:
Янв 17, 2014
Вы на странице сколько записей хотите вывести? Поменяйте значение showposts=3 на 100500 и выводите все, или на 5 и выводите 5, а дальше ставьте код пагинации, он сам посчитает нужное количество страниц — вопрос в чем?