<?php
// Получить подкатегории текущей родительской категории
$categories = get_categories( array(
'parent' => get_query_var( 'cat' ),
'hide_empty' => false,
'orderby' => 'ID',
'order' => 'ASC',
) );
// Если есть подкатегории, то выводим записи внутри них
if ( $categories ) :
foreach ( $categories as $category ) :
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'category__in' => array( $category->term_id )
);
$query = new WP_Query( $args );
// Если есть записи, то выводим их внутри подкатегории
if ( $query->have_posts() ) : ?>
<h2><?php echo $category->name; ?></h2>
<ul>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif;
// Сбросить запрос для следующей итерации
wp_reset_postdata();
endforeach;
else :
// Если нет подкатегорий, то выводим записи текущей категории
if ( have_posts() ) :
while ( have_posts() ) : the_post(); ?>
<!-- Здесь может быть HTML-код, если нужно -->
<h2><?php the_title(); ?></h2>
<div><?php the_content(); ?></div>
<!-- Здесь может быть еще HTML-код, если нужно -->
<?php endwhile;
endif;
endif;
?>
Хлебные крошки для этой конструкции
archive-products.php
<div class="breadgrumbs">
<ul>
<li><a href="/">Главная</a></li>
<li>Каталог</li>
</ul>
</div>
taxonomy-productscat.php
<div class="breadgrumbs">
<?php
$term = get_queried_object(); // Получаем текущий термин (категорию)
$taxonomy = $term->taxonomy; // Получаем текущую таксономию (тип категории)
$ancestors = get_ancestors($term->term_id, $taxonomy); // Получаем предков текущей категории
$ancestors = array_reverse($ancestors); // Меняем порядок массива на обратный
?>
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/products/">Каталог</a></li>
<?php
// Выводим предков текущей категории
if (!empty($ancestors)) {
foreach ($ancestors as $ancestor) {
$ancestor_term = get_term_by('term_id', $ancestor, $taxonomy);
echo '<li><a href="' . get_term_link($ancestor_term) . '">' . $ancestor_term->name . '</a></li>';
}
}
?>
<li><?php echo $term->name; // Выводим название текущей категории ?></li>
</ul>
</div>
single-products.php
<div class="breadgrumbs">
<?php
$term = get_the_terms(get_the_ID(), 'productscat'); // Получаем текущую запись
if ($term) {
$term = array_shift($term); // Получаем только первый термин из списка (если запись может иметь несколько терминов)
$taxonomy = $term->taxonomy; // Получаем текущую таксономию
$ancestors = get_ancestors($term->term_id, $taxonomy); // Получаем предков текущего термина
$ancestors = array_reverse($ancestors); // Меняем порядок массива на обратный
?>
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/products/">Каталог</a></li>
<?php
// Выводим предков текущего термина
if (!empty($ancestors)) {
foreach ($ancestors as $ancestor) {
$ancestor_term = get_term_by('term_id', $ancestor, $taxonomy);
echo '<li><a href="' . get_term_link($ancestor_term) . '">' . $ancestor_term->name . '</a></li>';
}
}
?>
<li><a href="<?php echo get_term_link($term); ?>"><?php echo $term->name; // Выводим название текущего термина ?></a></li>
<li><?php the_title(); ?></li>
</ul>
<?php } ?>
</div>