Иногда необходимо показать 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 записи по алфавиту.