Одним словом функция возвращает true
, если первый указанный элемент таксономии $term1
является родительским для второго указанного элемента $term2
(не важно, на каком уровне вложенности он находится), если же это условие не выполняется, данный условный тег возвращает false
.
term_is_ancestor_of( $term1, $term2, $taxonomy )
Пример для рубрик, кстати, для них есть отдельная функция cat_is_ancestor_of().
if ( term_is_ancestor_of( 1, 4, 'category') ){ echo 'Рубрика с ID = 4 является дочерней для рубрики с ID = 1'; }
Как известно, у меток post_tag
нет иерархии (если только вы не модифицировали эту таксономию), а следовательно нет родительских и дочерних элементов, поэтому рассмотрим какую-нибудь произвольную таксономию, например product_cat
(буду для удобства называть элементы этой таксономии категориями).
Суть следующего примера в том, чтобы выводить описание категории только для тех элементов, которые не являются дочерними элемента с ID = 4.
// заданный родительский элемент $term1_id = 4; // теперь нам нужно вытащить ID или объект текущей категории $term2_obj = get_term_by( 'slug', get_query_var( 'term' ), 'product_cat' ); if ( ! term_is_ancestor_of( $term1_id, $term2_obj, 'product_cat') ){ term_description( $term2_obj->term_id, 'product_cat' ); // выводим описание }
При помощи функций is_tax(), get_queried_object_id() и term_is_ancestor_of()
мы можем легко проверить, если мы находимся на определённой родительской категории или любой её дочерней категории:
$category_id_to_check = 5; if( is_tax( 'category', $category_id_to_check ) || term_is_ancestor_of( $category_id_to_check, get_queried_object_id(), 'category' ) ) { // выполняем какие-то действия }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый день, Миша.
Помогите с решением задачи.
Дано:
Зарегистрировано 4 новых типа данных (post_type) и для каждой по 1 новой таксономии с включенной иерархией.
Задача:
Вывести все разделы с подразделами для каждого типа данных. 1 раздел = 1 тип данных.
Я частично реализовал этот вывод, но не получается сделать вывод иерархическим. (В текущий момент, у меня просто выводятся требуемые мне разделы, списком "не иерархическим")
Второй вопрос, подскажите как более правильно написать мой код. Мне хочется развивать свои знания в области wordpress.
Заранее благодарен.
Артём, добрый день!
Прошу прощения за задержку с ответом — был в отъезде с 13-го числа до сегодняшнего дня.
Не знаю, актуальна ли ещё задача, но я вам отвечу.
C вашим кодом в принципе всё хорошо, понимание же в общем то прийдёт само со временем.
Для того, чтобы добиться вложенности, бы порекомендовал вам попробовать функцию wp_list_categories():
Надеюсь после отпуска мои мозги не размякли и я всё правильно вам написал :)
Спасибо большое, все работает!
Можно еще пару вопросов по этому коду?
Смотрите у меня стоит 2 задачи:
1. На странице категории (привязанной к типу_поста) не определяется текущий тип_поста - соответственно выдает ошибки. Как решить эту проблему?
2. Вопрос. Как вывести активный элемент в этом меню. Не могу понять, как присвоить класс к активным пунктам меню (у меня 2 уровня вложенности категорий).
1.
$post->post_type
— в данном случае вы просто пытаетесь получить тип записи из объекта записи.Для того, чтобы получить типы постов, привязанные к текущей таксономии, используйте этот код:
Соответственно, в вашей проверке это будет выглядеть так:
2. Тут я вас отправлю к документации функции wp_list_categories(), там есть.