Вывод постов из одной категории в разных местах


В сегодняшнем посте я расскажу об одной проблеме (точнее это не совсем проблема), с которой я столкнулся недавно, когда верстал сайт на заказ. Это лирика, перехожу сразу к сути.

Речь пойдет о движке 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 блока, в которых отображаются посты одной категории. В первом — последние, во втором те, которые идут до предыдущих. Все очень просто. Если что непонятно, задавайте вопросы в комментариях.

inet-earn.ru

Буду признателен Вам если поделитесь статьей:
Получайте еще больше новой информации подписавшись на RSS-ленту!
Лучшая система размещения статей

Комментариев: (7) к "Вывод постов из одной категории в разных местах"

1. PTC | 28 Октябрь 2010 в 4:28

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

2. Артем | 11 Октябрь 2011 в 14:06

А мне нужно вывести в сайдбаре заголовки постов определенной категории. Можно прописать код, но я хотел бы это сделать с помощью какого-нибудь плагина. Может вы подскажите что-нибудь?

3. inet-earn | 11 Октябрь 2011 в 16:29

Артем, на счет плагина не знаю, возможно и есть плагины, реализующие подобное. Я лично таких не встречал.
В вашем случае как раз-таки код было бы проще прописать, чем доп. плагин ставить. Меньше нагрузки на CMS.

4. seo-rocknrolla | 25 Октябрь 2011 в 15:10

Интересно, а можно ли это сделать не в сайдбаре, а в сттье: до и после текста?

5. inet-earn | 25 Октябрь 2011 в 15:46

seo-rocknrolla, если имеется ввиду шаблон блога, то да, можно.

6. Дмитрий | 12 Апрель 2012 в 17:22

Хорошее решение, спасибо)

Единственное, НО: я бы советовал писать слитно начало кодировки пхп. Это «< ?php" заменить в коде на это "<?php".

Из-за этого пробела в некоторых темах wordpress код вывода статей может не работать. Учитывая то, что многие практически вообще не понимают в пхп и wp ничего, они тупо копируют ваш код к себе в блог, который может не заработать.

7. inet-earn | 16 Апрель 2012 в 13:08

Дмитрий, я в курсе данной проблемы, дело в том что плагин wp-syntax, который отвечает за подсветку кода на данном блоге, почему-то ставит пробел между < и ?php.
В любом случае спасибо, нужно либо плагин сменить, либо читателей предупредить об этом.

Добавить комментарий