Статьи

WordPress: Выводим блоки рубрик с сортировкой по дате последнего поста

Опубликовано: 12.04.2018

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


Общие действия с пользователями в CMS Drupal (18/21)

Но мне хотелось не просто вывести эти блоки в каком-то произвольно порядке, а чтобы они автоматически сортировались в зависимости от даты последних записей в этих рубриках. Т.е., к примеру, если мой последний пост опубликован в рубрике «CSS», а предпоследний — в рубрике «jQuery», то на главной первым будет отображаться блок рубрики «CSS», вторым, соответственно, «jQuery» и так далее. Т.е. появляется динамичность этих блоков.

Как оказалось, решить подобную задачу не так и сложно. Собственно, готовым php-кодом я и делюсь ниже. Наверняка кому-нибудь да пригодится.

PHP-код

Вот весь основной код с моими комментариями:

<?php // берем последние 30 постов сайта $loop = new WP_Query('posts_per_page=30'); if ($loop->have_posts()) { // проходимся по каждому из полученных постов while ($loop->have_posts()) { $loop->the_post(); // считываем данные о рубрике поста $category = get_the_category($loop->post->ID); // получаем идентификатор рубрики и добавляем его в массив $array1[] = $category[0]->cat_ID; } // удаляем из полученного массива повторяющиеся ID рубрик $array1 = array_unique($array1); // создаем 2-й массив, в котором указываем ID рубрик, последние записи из которых мы хотим вывести $array2 = array(1,10,45,107); // сравниваем 2 массива, чтобы в списке ID рубрик, полученных из последних 30 постов, остались только те, которые мы указали в массиве $array2, и создаем новый (3-й) массив // это действие необходимо для того, чтобы сохранилась сортировка рубрик по дате последнего поста в них $array = array_intersect($array1, $array2); } // создаем счетчик $i = 0; // запускаем цикл, который выводит блоки рубрик foreach ($array as $cat) { $i++; // получаем данные рубрики $category = get_category($cat); ?> <div class="column<?php /* добавляем класс .odd к каждому нечетному блоку рубрики */ if ($i%2 == true) echo ' odd'; ?>"> <h2><?php echo $category->name; ?></h2> <?php // берем последние 7 записей из рубрики $loop = new WP_Query('posts_per_page=7&cat=' . $cat); ?> <?php if ($loop->have_posts()) { ?> <ul> <?php // запускаем цикл, который выводит последние записи из рубрики while ($loop->have_posts()) { $loop->the_post(); ?> <li><?php the_time('d.m.Y') ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php } ?> <?php } ?> </ul> <a href="<?php echo get_category_link($category->cat_ID); ?>">Все статьи рубрики "<?php echo $category->name; ?>"</a> </div><!-- .column --> <?php } ?>

В случае, если вам необходимо, чтобы выводились вообще все рубрики, которые есть на сайте, то в вышеуказанный код внесите следующие изменения:

2011.11.19
Карта