Отображение настраиваемых таксономий, отсортированных по иерархии родитель/дочерний?

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

У меня есть пользовательский тип записи с пользовательской таксономией (чтобы показать некоторые примеры “лучших практик” на моем сайте). На странице отдельной записи (single-bestpractice.php) я хотел показать все термины (категории) следующим образом:

Родитель: Ребёнок, Ребёнок, Ребёнок

Я попробовал этот код:

$customPostTaxonomies = get_object_taxonomies('bestpractice');
if (count($customPostTaxonomies) > 0) {
    foreach ($customPostTaxonomies as $tax) {
        $args = array(
            'orderby' => 'name',
            'show_count' => 0,
            'pad_counts' => 0,
            'hierarchical' => 1,
            'taxonomy' => $tax,
            'title_li' => ''
        );  
        wp_list_categories( $args );
    }
}

который выводит:

Ребёнок, Ребёнок, Родитель, Ребёнок,

…так что, есть ли способ отсортировать это по родителю/ребёнку и сделать так, чтобы родительский элемент начинался с “:” и убрать “,” у последнего ребёнка?

спасибо,
Йохен

Вы могли бы также обратить внимание на этот пост, так как он, по сути, такой же…
Отобразить термины из пользовательской таксономии, назначенной записи (внутри цикла) в иерархическом порядке

.

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

Чтобы отобразить термины кастомной таксономии, отсортированные по иерархии родительских и дочерних элементов, необходимо немного изменить подход к реализации данной функциональности. Ваша текущая реализация с использованием wp_list_categories() не позволяет вам полностью контролировать форматирование, особенно в отношении порядка отображения и обработки последней запятой.

Вот подробное пошаговое руководство по достижению желаемого результата:

  1. Получение всех терминов таксономии:
    Мы будем использовать функцию get_terms() для получения всех терминов определенной таксономии и их иерархической структуры.

  2. Организация данных в иерархическом формате:
    Мы отсортируем термины по родительской и дочерней структуре, чтобы иметь возможность их корректно отображать.

  3. Отображение в требуемом формате:
    Мы выведем данные в формате "Родитель: Дочерний1, Дочерний2, Дочерний3", при этом уберем запятую после последнего дочернего термина.

Вот пример кода, который решает вашу задачу:

$taxonomy = 'ваша_кастомная_таксономия'; // Замените на вашу таксономию
$terms = get_terms(array(
    'taxonomy' => $taxonomy,
    'orderby' => 'name',
    'hide_empty' => false,
));

if (!empty($terms) && !is_wp_error($terms)) {
    // Сортируем термины по родителям
    $term_hierarchy = array();
    foreach ($terms as $term) {
        if ($term->parent == 0) {
            // Если это родительский термин
            $term_hierarchy[$term->term_id] = array(
                'term' => $term,
                'children' => array()
            );
        } else {
            // Если это дочерний термин
            $term_hierarchy[$term->parent]['children'][] = $term;
        }
    }

    // Выводим термины в нужном формате
    foreach ($term_hierarchy as $parent_term_data) {
        $parent_term = $parent_term_data['term'];
        echo '<strong>' . esc_html($parent_term->name) . ':</strong> ';

        $children = $parent_term_data['children'];
        $child_names = array();

        foreach ($children as $child) {
            $child_names[] = esc_html($child->name);
        }

        // Объединяем дочерние термины в строку
        echo implode(', ', $child_names) . '<br>';
    }
}

Объяснение кода:

  1. Получение терминов: Мы получаем все термины для указанной таксономии с помощью get_terms(), при этом указываем аргументы для сортировки и исключаем пустые термины.

  2. Сортировка по родительским и дочерним терминам: Мы используем массив для хранения иерархической структуры терминов. Родительские термины добавляются в основной массив, а дочерние – в соответствующий элемент массива.

  3. Форматирование вывода: Используя implode(), мы собираем имена дочерних терминов в строку, разделенную запятыми, и выводим всю информацию в требуемом формате. Если у родителя нет дочерних терминов, он просто не будет выводиться.

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

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

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