Отправляет email-рассылки с помощью сервиса Sendsay

Свобода слова вебмастерского

  Все выпуски  

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



WordPress: Выводим блоки рубрик с сортировкой по дате последнего поста
2012-07-11 15:50 Dimox

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

Но мне хотелось не просто вывести эти блоки в каком-то произвольно порядке, а чтобы они автоматически сортировались в зависимости от даты последних записей в этих рубриках. Т.е., к примеру, если мой последний пост опубликован в рубрике “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 } ?>

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

  1. Удалите эти строки:

    $array2 = array(1,10,45,107);
    $array = array_intersect($array1, $array2);
  2. Замените эту строку:

    $array1 = array_unique($array1);

    на такую:

    $array = array_unique($array1);

Прошу обратить внимание на следующий момент. Если вы в массиве $array2 = array(…) указали определенную рубрику, но ее блок не выводится, значит среди последних 30 постов (которое задано в самой первой строке) не было постов, опубликованных в этой самой рубрике. Значит вам нужно вместо 30 поставить число побольше.

CSS-код

Теперь остается добавить следующие стили, чтобы блоки отображались в 2 столбца:

.column {
  float: right;
  width: 48%;
}
.column.odd {
  clear: both;
  float: left;
}

Ширину (48%) при необходимости поменяйте на свою.


© 2012 Dimox.name | WordPress: Выводим блоки рубрик с сортировкой по дате последнего поста
Все права защищены. Перепечатка запрещена.



В избранное