Вывод постов из одной категории в разных местах
В сегодняшнем посте я расскажу об одной проблеме (точнее это не совсем проблема), с которой я столкнулся недавно, когда верстал сайт на заказ. Это лирика, перехожу сразу к сути.
Речь пойдет о движке WordPress. Предположим нам нужно вывести два блока с постами одной категории и расположить эти два блока в разных местах, например один блок – верх сайдбара, другой блок – низ сайдбара. По пять постов в каждом блоке. Теперь самое интересное: в первом блоке выводятся последние посты, а во втором выводятся также последние посты, но те, которые идут до предыдущих.
Итак, начнем с вывода первого блока. Выведем в нем 5 последних постов нужной категории. Делается это при помощи функции get_posts:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul class="block1"> <!-- Далее выводим цикл --> < ?php $posts = get_posts ("category=1&numberposts=5"); ?> < ?php if ($posts) : ?> < ?php foreach ($posts as $post) : setup_postdata ($post); ?> <!-- Сюда выводим сам блок. Например: --> <li><a href="< ?php the_permalink(); ?>">< ?php the_title(); ?></a></li> < ?php endforeach; ?> < ?php endif; ?> </ul> |
В category=1 – это идентификатор категории. Чтобы его узнать, зайдите в админку в раздел Рубрики и в списке созданных категорий наведите мышью на нужную, в строке состояния ищите …&cat_ID=1, где 1 и есть идентификатор категории.
numberposts=5 – это количество выводимых постов. В нашем случае нам и нужно два блока по пять постов.
Что такое < ?php the_permalink(); ?> и < ?php the_title(); ?> я думаю вы знаете. Но если кто не знает, то первая функция выводит ссылку на пост, а вторая – заголовок поста.
Все, первый блок готов. Теперь сделаем второй. Второй делается точно также, поэтому просто скопируйте его. Но, если вы помните, во втором нам нужно также вытянуть 5 последних постов этой же категории, но вывести нужно те посты, которые идут до предыдущих. Иначе будет два одинаковых блока.
Скажу честно, я столкнулся с подобным в первый раз. Перерыл тонну наших сайтов, так и не нашел ответа. В итоге нашел случайно на зарубежном форуме намек, а остальное додумал сам. Опять лирика
. В общем делается это элементарно.
Как я уже и говорил копируем просто первый блок и в функцию get_posts («category=1&numberposts=5″); после 5 добавляем &offset=5, offset=5 – запрещает вывод последних 5 постов. Нам пять как раз и нужно, поскольку мы их уже вывели в первом блоке. В итоге код будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul class="block2"> <!-- Далее выводим цикл --> < ?php $posts = get_posts ("category=1&numberposts=5&offset=5"); ?> < ?php if ($posts) : ?> < ?php foreach ($posts as $post) : setup_postdata ($post); ?> <!-- Сюда выводим сам блок. Например: --> <li><a href="< ?php the_permalink(); ?>">< ?php the_title(); ?></a></li> < ?php endforeach; ?> < ?php endif; ?> </ul> |
Вот и все, мы получили 2 блока, в которых отображаются посты одной категории. В первом – последние, во втором те, которые идут до предыдущих. Все очень просто. Если что непонятно, задавайте вопросы в комментариях.






У товарища блог на WordPress, он вроде чёто подобное хотел сделать, кину ему ссылку, пускай читает