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

14.05.2017

На одном из сайтов необходимо было вывести на Главной странице блоками категории, а внутри записи из этих категорий.

Нашел такой вполне рабочий код здесь:

<?php $cats = get_categories(); // Получаем список всех категорий
foreach ($cats as $cat) {
  echo "<h3>".$cat->cat_name."</h3>"; // Получаем название одной категории
  echo "<ul class='uldotted'>";
  query_posts('posts_per_page=-1&cat='.$cat->cat_ID); // изменяем параметры основного цикла WordPress и затем выводим посты
  while(have_posts()) {
    the_post();
 $category = get_the_category(); // получаем список категорий для одного поста

  if ($category[0]->cat_ID == $cat->cat_ID) { // Сравниваем список всех категорий с ID первой категории этого поста, и если совпадает, то выводим ссылку на пост только один раз, даже если он указан в нескольких категориях
    echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
  }
}
echo "</ul>";
}
?>

Переделав его под свой шаблон, получил такой формат:

<div class="home-wrap">
  <?php $cats = get_categories(); // get list of categories
  foreach ($cats as $cat) { ?>
  <div class='cat-block'>
    <div class="cat-title"><?php echo $cat->cat_name; ?></div>
    <div class='posts-list'>
      <?php query_posts('posts_per_page=5&cat='.$cat->cat_ID);
      while(have_posts()) {
        the_post();
        $category = get_the_category();
        $category_link = get_category_link($cat->cat_ID);
        if ($category[0]->cat_ID == $cat->cat_ID) {
          get_template_part('include/post-item'); //include post content
        }
      } ?>
    </div><!-- /posts-list -->
    <a href="<?php echo esc_url( $category_link ); ?>" class="btn"><?php _e('See more', 'crea'); ?></a>
  </div><!-- /cat-block -->
  <?php } ?>
</div><!-- /home-wrap -->

В файле post-item.php выводим данные, которые нам нужно получить из каждой записи, например, заголовок, ссылку на запись, миниатюру и excerpt.

Не уходи, пока не прочитаешь:

Оставить комментарий