Модератор
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.