Поддержка Темы и шаблоны Вывод дочерних таксономий

  • Есть необходимость вывести пользовательские таксономии.

    Есть родительские таксономии — 1. Руководство. 2. Офис и т.д.
    И есть дочерние таксономии 1. Директора. 2. Менеджеры, который относятся к родительской таксономии «Руководтво».

    Написал код:

    <?php
    	$terms_personal = get_terms("our_personal");
    	$count = count($terms_personal);
    	if($count > 0){
    		echo '<ul id="filter">';
    			foreach ($terms_personal as $term_workman) {
    				echo "<li data-group=" . $term_workman->slug . ">" . $term_workman->name . "</li>";
    				}
    			echo '</ul>';
    		}
    	?>

    В итоге получаю список всех пользовательских таксономий (рубрик) у пользовательской таксономии «our_personal».

    Только вот по ТЗ родительские таксономии я вывел в меню сайта, а дочерние надо вывести отдельно. Задача. вывести список дочерних таксономий?

    PS: Уточнение. В данный момент при переходе по ссылке родительской таксономии открываются только посты относящиеся к этой таксономии. То-есть получается что и списко дочерних таксономий на странице должен относится только к определенной родительской таксономии.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Yuri

    (@yube)

    У таксономий нет иерархии. Иерархия может быть у термов.

    Среди параметров функции get_terms() есть ‘child_of’, с помощью которого легко можно получить массив детей заданного терма.

    Матчасть: get_terms()

    Спасибо. Работает. Однако удается выводить только определенные таксономии для всех страниц разом. То-есть существует родительская таксономия с ID=7. Указываю ‘child_of’ => 7, и в итоге получаю дочерние таксономии от родительской у которой ID=7. Но выводятся они для всех страниц сразу.

    То-есть получается что надо сделать так, чтобы функция определяла — посты какой именно родительской таксономии выводятся на странице. Вывести ее в переменную и эту переменную присвоить параметру функции child_of.

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

    <?php // пока что у нас есть возможность получить ярлык текущего элемента таксономии и название самой таксономии
    $taxonomy_slug = get_query_var('term');
    $taxonomy = get_query_var('taxonomy');
     
    // затем уже можно получить ID
    $term = get_term_by( 'slug', $taxonomy_slug, $taxonomy );
    $term_id = $term->term_id;
     
    // и потом уже выводим через get_terms() :)
    $children = get_terms($taxonomy, array( 'child_of' => $term_id ) ); 
    ?>
    Модератор Yuri

    (@yube)

    получаю дочерние таксономии от родительской у которой ID=7. Но выводятся они для всех страниц сразу.

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

    Хорошо. Попробую еще раз сформулировать.

    1. Создал произвольные типы записей и для них зарегистрировал таксономии (название зарегестрированных таксономий «our_personal»).
    2. Далее через админку создал рубрики «руководство», «директора», «менеджеры».
    3. Рубрикам «директора», «менеджеры» указал чтоб родительской для них будет рубрика «руководство».
    4. Cоздал файл taxonomy-personal.php и в файле настроил вывод постов через new WP_Query.
    5. Разместил рубрику «руководство» в меню сайта и соответственно на странице получаю всех сотрудников из рубрик «директора».
    6. И, соответственно, внутри этого файла нужно вывести меню с рубриками «директора» и «менеджеры». (то же самое будет относится и для других рубрик. родительская рубрика в меню, а рубрики принадлежащие родительской — на странице, куда выводятся посты родительской рубрики).

    Как я понял родительские посты имеют свой собственный идентификатор. Если указать его в параметре child_of ,то я получу всех «детей» указанной рубрики.

    В итоге получается что надо каким-то образом определять идентификатор родительской рубрики, посты которой и выводятся на странице. Далее этот идентификатор в качестве переменной указать в параметре child_of .

    Таким образом, выводя на странице посты родительской рубрики, мы также выводим на этой странице и список дочерних рубрик.

    Модератор Yuri

    (@yube)

    Уже немного лучше 🙂

    Вы выше привели код (тоже не без терминологической путаницы). В нем есть всё, что нужно.

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

    в результате получим объект term.
    Его ID = $term->term_id
    Если нам нужен ID родителя этого терма, то это $term->parent
    Список термов-детей так:

    $terms = get_terms($taxonomy, array( 'child_of' => $term->term_id ) ); 
    
    Модератор Yuri

    (@yube)

    Cоздал файл taxonomy-personal.php и в файле настроил вывод постов через new WP_Query.

    Почему personal, а не our_personal?
    Зачем new WP_Query?

    Все. Разобрался.

    $term_slug = get_query_var('term'); - получает slug таксономии.
    $taxonomy = get_query_var('taxonomy'); - получает имя зарегестрированной таксономии
    $term = get_term_by( 'slug', $term_slug, $taxonomy ); - получаем элемент таксономии
    $term_id = $term->term_id; - выводим его ID

    Таким образом запрашивая элементы терминов можно указать параметру child_of переменную содержащую текущий идентификатор родительской рубрики и в итоге получаем список тех рубрик, которые относятся к определенной таксономии (рубрики), посты которой выводятся на странице.
    $terms = get_terms($taxonomy, array( 'child_of' => $term_id ) );

    • Ответ изменён 6 лет, 11 месяцев назад пользователем LLIypuk.
Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Вывод дочерних таксономий» закрыта для новых ответов.