Список активных таксономических терминов

Вопрос или проблема

Я работаю над тонкой настройкой шаблона, который имеет фильтруемую мейсонри-разметку. Я создал taxonomy-categories.php, и для фильтрации мне нужны термины активной таксономии. Шаблон, который я использую, имеет следующий код внутри

<ul id="filter">
                <li><a href="#" class="current" data-filter="*" title="">*</a></li>
                <?php
                $categories = get_terms('categories');
                foreach( (array)$categories as $categorie){
                    $cat_name = $categorie->name;
                    $cat_slug = $categorie->slug;
                ?>
                <li><a href="#" data-filter=".<?php echo esc_attr($cat_slug); ?>"><?php echo esc_attr($cat_name); ?></a></li>
                <?php } ?>
            </ul>

Как видите, он берет все термины из всей таксономии. Я хочу, чтобы он брал только подтермины активной таксономии.

Так что если я нахожусь на URL example.com/portfolio/name_of_cat_one, я хочу перечислить дочерние категории этой категории.

Я знаю, что могу сделать это с помощью get_term_by и немного подкорректировать, чтобы достичь своей цели, но после многих часов попыток безуспешно я в конце концов решил спросить здесь 🙂

Что ж, я это сделал..

        <ul id="filter">
                <li><a href="#" class="current" data-filter="*" title="">*</a></li>
                <?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?>
                <?php
                $term_id = $term->term_id;
                $taxonomy_name="categories";
                $termchildren = get_term_children( $term_id, $taxonomy_name );

                foreach ( $termchildren as $child ) {
                    $term = get_term_by( 'id', $child, $taxonomy_name );
                    echo '<li><a href="#" data-filter=".' . $term->slug . '">' . $term->name . '</a></li>';
                }
                ?>

            </ul>

.

Ответ или решение

Как получить активные термины таксономии в WordPress

Если вы работаете с шаблонами WordPress и настраиваете фильтруемую макетную сетку, вам, вероятно, потребуется извлекать только подтермины для активной таксономии. В данном случае вы уже создали файл taxonomy-categories.php и хотите, чтобы он выводил только дочерние термины для текущей категории. Здесь мы подробно разберём, как это сделать, используя стандартные функции WordPress.

Шаг 1: Получение текущего термина

Для начала вам нужно получить текущий термин. Это делается с помощью функции get_term_by(). Вам необходимо передать параметры, чтобы правильно получить термин, соответствующий текущему URL. Например:

$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));

Здесь get_query_var('term') получает значение термина из URL, а get_query_var('taxonomy') — текущую таксономию. Убедитесь, что правильно указаны названия полей.

Шаг 2: Получение подтерминов

После того как вы получили активный термин, следующим шагом будет извлечение его подтерминов. Это можно сделать с помощью функции get_term_children():

$term_id = $term->term_id;
$taxonomy_name = "categories"; // Замените на ваше название таксономии
$termchildren = get_term_children($term_id, $taxonomy_name);

Шаг 3: Вывод подтерминов

Теперь, когда вы получили массив подтерминов в переменной $termchildren, вы можете использовать цикл foreach, чтобы пройтись по ним и вывести термины в нужном формате:

<ul id="filter">
    <li><a href="#" class="current" data-filter="*" title="">*</a></li>
    <?php foreach ($termchildren as $child) {
        $term = get_term_by('id', $child, $taxonomy_name);
        echo '<li><a href="#" data-filter=".' . esc_attr($term->slug) . '">' . esc_html($term->name) . '</a></li>';
    } ?>
</ul>

Полный код

Ниже представлен полный код, который вы можете использовать в вашем шаблоне:

<ul id="filter">
    <li><a href="#" class="current" data-filter="*" title="">*</a></li>
    <?php 
    $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); 
    if ($term) {
        $term_id = $term->term_id;
        $taxonomy_name = "categories"; // Укажите вашу таксономию
        $termchildren = get_term_children($term_id, $taxonomy_name);

        foreach ($termchildren as $child) {
            $term = get_term_by('id', $child, $taxonomy_name);
            echo '<li><a href="#" data-filter=".' . esc_attr($term->slug) . '">' . esc_html($term->name) . '</a></li>';
        }
    } else {
        echo '<li>Нет подтерминов.</li>'; // Обработка случая, если термин не найден
    }
    ?>
</ul>

Заключение

Теперь вы знаете, как получать активные подтермины текущей таксономии и выводить их в формате, подходящем для фильтров в вашем шаблоне WordPress. Данный подход позволяет динамически подгружать термины в зависимости от контекста, что улучшает пользовательский опыт и влияет на SEO вашего ресурса.

Не забывайте, что при работе с пользовательскими таксономиями всегда полезно проверять, существуют ли термины, прежде чем пытаться их вывести, чтобы избежать ошибок отображения.

Оцените материал
Добавить комментарий

Капча загружается...