Нужно получить список категорий таксономии соблюдая иерархию
Имеется таксономия -> education_category, мне нужно вывести иерархию категорий данной таксономии. У меня есть код который выводит все категории таксономии но без соблюдения списка иерархии, к тому же когда находимся на текущей категории, нужно добавлять класс current-cat. Буду благодарен за помощь!
Код который выводит все категории таксономии но без соблюдения списка иерархии:
<?php
$taxonomy_name = "education_category";
$parent_terms = get_the_terms($post->ID, 'education_category');
foreach ($parent_terms as $pterm) {
$terms = get_terms($taxonomy_name, array('parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false));
foreach ($terms as $term) {
echo '<li><a href="' . get_term_link($term) . '" class="toggle-posts">' . $term->name . '</a></li>';
}
}
?>
Сейчас мой код отображает следующее:
- Категория таксономии
- Саб категория таксономии
- Категория таксономии
- Категория таксономии
- Саб категория таксономии
- Саб категория таксономии 2
В результате я хочу получить:
- Категория таксономии
-
- Саб категория таксономии
- Категория таксономии
- Категория таксономии
-
- Саб категория таксономии
-
- Саб категория таксономии 2
Вот функцию нашел в сети, которая собирает массив терминов с учетом вложенности:
/** * Recursively sort an array of taxonomy terms hierarchically. Child categories will be * placed under a 'children' member of their parent term. * @param Array $cats taxonomy term objects to sort * @param Array $into result array to put them in * @param integer $parentId the current parent ID to put them in */ function sort_terms_hierarchicaly( & $cats, & $into, $parentId = 0 ){ foreach( $cats as $i => $cat ){ if( $cat->parent == $parentId ){ $into[ $cat->term_id ] = $cat; unset( $cats[$i] ); } } foreach( $into as $top_cat ){ $top_cat->children = array(); sort_terms_hierarchicaly( $cats, $top_cat->children, $top_cat->term_id ); } }Используем так:
$categories = get_terms('category', array('hide_empty' => false)); $cat_hierarchy = array(); sort_terms_hierarchicaly( $categories, $cat_hierarchy ); print_r( $cat_hierarchy );Получим массив:
Остается его обработать и вывести что нужно... Больше не подскажу, сорри...
Что если использовать wp_list_category?
Вот код:
Как нам получать child_of так, чтобы мы могли находится как на вложенной категории так и на странице поста, и слева выводился список с учетом моего условия?
Первая категория (не показываем)
Вторая категория (не показываем)
По логике вещей я должен передавать в child_of ID родительской категории...
Да так и есть!
Рубрики записи получаются с помощью get_the_terms()
Текущую рубрику на странице рубрики можно получить с помощью get_queried_object()
Там везде есть в примерах как получить нужный ID...
Я использую get_queried_object_id
Да, на странице родительской категории я получаю то что нужно, большое спасибо, это помогает! Но на странице поста получаю сообщение о том что категории отсутствуют...
Но как я могу использовать get_queried_object в моем случае?
Вот скриншоты:
http://joxi.ru/YmEY64OUYey0m6
http://joxi.ru/vAWMNk5tZa0xmW
Осталось получать список как на первом скриншоте на странице поста, я буду очень благодарен Вам!
Когда я использую:
get_queried_object()->term_id
в результате выводит текущую категорию в сайдбаре слева.. Но я должен выводить всегда один и тот же список в независимости где я нахожусь, либо это пост категории, либо категория...
http://wp-kama.ru/function/wp_list_categories
https://wp-kama.ru/function/wp_nav_menu#primer-ispolzovaniya-parametra-walker
<?php $taxonomy_name = "education_category"; $parent_terms = get_the_terms($post->ID, 'education_category'); foreach ($parent_terms as $pterm) { $terms = get_terms($taxonomy_name, array('parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false)); foreach ($terms as $term) { echo '<li><a href="' . get_term_link($term) . '" class="toggle-posts">' . $term->name . '</a></li>'; } } ?>Я уже перебробовал множество вариантов, могли бы вы взглянуть на мой код?
Вот логика, предполагаем что мы находимся на странице первой категории: