Вывести на странице родительской категории ее подкатегории списком и в подкатегориях вывести записи, которые относятся к ним

  • Главная
  • БлогIT
  • Вывести на странице родительской категории ее подкатегории списком и в подкатегориях вывести записи, которые относятся к ним
<?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>
Контакты

Работаем: с ПН по ПТ, с 08:00 до 17:00 (МСК)
Отдыхаем: в СБ и ВС, чтобы быть в тонусе
и реализовывать самые сложные идеи