Иногда необходимо показать WordPress записи на главной странице сайта, сгруппированные по рубрикам. Основной функционал WordPress не позволяет этого сделать, но сгруппировать посты по категориям можно с помощью добавления php кода в основной цикл WordPress.
Чтобы вам было понятно, о чем именно идет речь, посмотрите схематичный рисунок ниже. который показывает, как будут сгруппированы WordPress посты по рубрикам.
Чтобы реализовать подобный вывод записей, необходимо отредактировать стандартный цикл WordPress примерно следующим образом:
<?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>"; } ?>
Группируем записи произвольного типа по значениям таксономий
Все написанное выше касается только стандартных WordPress записей и рубрик. Если вам нужно сгруппировать по таксономиям записи произвольного типа, то код необходимо немного модернизировать.
<?php $settings = array( 'taxonomy' => 'product_cat' ); $cats = get_categories( $settings ); foreach ($cats as $cat) { echo "<h3>".$cat->cat_name."</h3>"; $catid = $cat->cat_ID; echo "<ul class='uldotted'>"; $args = array( 'post_type' => 'product', 'posts_per_page' => '-1', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'id', 'terms' => $catid ) ) ); query_posts( $args ); while(have_posts()) : the_post(); $category = get_the_terms($post->ID, $settings); $first_term = $category['term_id']; if ($category[0]->term_id == $cat->cat_ID) : ?> <?php woocommerce_get_template_part( 'content', 'product' ); ?> <? endif; endwhile; echo "</ul>"; } ?>
Эта часть кода написана специально для группировки товаров по категориям в магазине на основе WooCommerce. Но если у вас не магазин, а какой-то другой тип записи, то вам достаточно поменять slug таксономии и post_type на свои значения. Ах, да, еще заменить <?php woocommerce_get_template_part( 'content', 'product' ); ?> на какой-то свой код, с помощью которого будут выводиться записи. Например, можете использовать код из примера выше:
<? echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; ?>
Вот в общем-то и все, что хотелось рассказать вам о группировке WordPress записей по рубрикам и таксономиям. Чуть позже вы сможете узнать, как группировать WordPress записи по алфавиту.