Задать вопрос
@akf_13rm

Как вывести посты сгруппировав их по двум кастомным таксономиям?

Здравствуйте!
Столкнулся с проблемой:
Есть custom post type (courses) и есть две кастомные таксономии (courses_format и courses_group).
На странице архива курсов я вывожу ссылку на taxonomy-courses_group.php:
<?php $terms = get_terms('courses_group');
            foreach($terms as $term){ 
                $term_link = get_term_link($term->term_id, 'courses_group');
                ?>
                <div class="seminars__item">
                    <a href="<?php echo $term_link ?>" class="hp-seminar course-archive seminar">
                        <div>
                            <picture>
                                <img src="<?php echo carbon_get_term_meta($term->term_id, 'crb_thumb'); ?>" class="img-responsive sub_tax_crop" alt="Alt">
                            </picture>
                            <div class="title"><?php echo $term->name; ?></div>
                            <span class="ico-book"><i></i><span>Подробнее</span></span>
                        </div>
                    </a>
                </div>
          <?php } ?>


То есть, при переходе на страницу taxonomy-courses_group.php я получаю список курсов, определенной групы (courses_group):
621637501f99e749089879.png

Но мне по мимо этого, нужно эти курсы отсортировать и по таксономии courses_format (там 2 варианта: онлайн курс и очный курс).
Не могу разобраться, как мне на странице taxonomy-courses_group.php сортировать курсы ещё и по другой таксономии: courses_format ?
У меня получается либо по одной таксономии сортировка либо по другой..

Код taxonomy-courses_group.php:
<?php
        $term_ochnye = get_term_by('slug', 'ochnye', 'courses_format');
        $term_online = get_term_by('slug', 'onlajn', 'courses_format');
        ?>
        <div class="seminar-tabs">
            <div class="seminar-tabs__item">
                <a href="#" class="onlineTab tab activetabs onlineTab-active-item" data-toggle-target=".tab-content-1">Онлайн курсы</a>
            </div>
            <div class="seminar-tabs__item">
                <a href="#" class="onlineTab tab" data-toggle-target=".tab-content-2">Очные курсы</a>
            </div>
        </div>

        <div class="onlineCursy tab-content tab-content-1 activetabs">
            <div class="onlineCursy__container">

                <?php

                $terms_group = get_terms('courses_group');
                foreach($terms_group as $term_g){ 
                    $term_link = get_term_link($term_g->term_id, 'courses_group');

                $head = new WP_Query(array(
                        'post_type' => 'courses',
                        'tax_query' => array(
                        'relation' => 'AND',
                            array(
                                'taxonomy' => 'courses_format',
                                'field'    => 'id',
                                'terms'    => $term_online,
                            ),
                            array(
                                'taxonomy' => 'courses_group',
                                'field'    => 'id',
                                'terms'    => $term_g->term_id,
                            ),
                        ),
                        'post__not_in' => array ($post->ID),
                    )
                ) ?>
                <?php if ( $head->have_posts() ) : ?>
                    <?php $firstPosts = array(); ?>
                    <?php while ( $head->have_posts() ) : $head->the_post(); ?>
                        <?php $firstPosts[] = $post->ID; ?>

                        <div class="onlineCursy__item">
                            Здесь вывод для онлайн курсов..
                        </div>

                    <?php endwhile; ?>
                <?php else: ?>
                <?php endif; wp_reset_postdata(); ?>
                <?php } ?>

            </div>
        </div>

       <div class="ochnieCursy tab-content tab-content-2">
            <div class="onlineCursy__container">

                <?php

                $head = new WP_Query(array(
                        'post_type' => 'courses',
                        'tax_query' => array(
                        'relation' => 'AND',
                            array(
                                'taxonomy' => 'courses_format',
                                'field'    => 'id',
                                'terms'    => $term_ochnye,
                            ),
                            array(
                                'taxonomy' => 'courses_group',
                                'field'    => 'id',
                                'terms'    =>$term_g->term_id,
                            ),
                        ),
                        'post__not_in' => array ($post->ID),
                    )

                ) ?>
                <?php if ( $head->have_posts() ) : ?>
                    <?php $firstPosts = array(); ?>
                    <?php while ( $head->have_posts() ) : $head->the_post(); ?>
                        <?php $firstPosts[] = $post->ID; ?>

                         Здесь вывод для очных курсов, аналогично как выше для онлайн курсов..

                    <?php endwhile; ?>
                <?php else: ?>
                <?php endif; wp_reset_postdata(); ?>

            </div>
        </div>


Сейчас сортировка работает некорректно, судя по полотну, которое у меня в результате получилось, наверное и не удивительно..
Код и скрины прикрепил.
Если кто то сталкивался с подобным, прошу помощи, буду очень благодарен.
  • Вопрос задан
  • 89 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы