Как получить элемент таксономии верхнего уровня для в котором находится указанная запись (пост)?
Есть таксономия tax, древовидная. Она прикреплена к постам (записям типа post).
Запись всегда прикрепляется к последнему уровню таксономии. Например, уровни такие: ягода > малина. Пост прикреплен к термину малина.
Вопрос:
Как получить самый родительский (самый верхний, самый первый) элемент таксономии (термин). Т.е. как получить термин ягода - термин верхнего уровня из указанной таксономии tax для текущего поста в цикле.
И желательно, чтобы я мог указать для какого поста мне нужно получить термин.
Заранее спасибо!
Родной функции в WordPress такой нет. Но это поправимо...
/** * Получает термин верхнего уровня, для указанного или текущего поста в цикле * @param string $taxonomy Название таксономии * @param integer|object [$post_id = 0] ID или объект поста * @return string/wp_error Объект термина или false */ function get_post_top_term( $taxonomy, $post_id = 0 ) { $post_id = $post_id->ID ?? ( $post_id ?: get_the_ID() ); $terms = get_the_terms( $post_id, $taxonomy ); if( ! $terms || is_wp_error($terms) ){ return $terms; } // только первый $term = array_shift( $terms ); // найдем ТОП $parent_id = $term->parent; while( $parent_id ){ $term = get_term_by( 'id', $parent_id, $term->taxonomy ); $parent_id = $term->parent; } return $term; }Пример того, как нужно использовать функцию:
Супер! Спасибо, то что нужно!
Можно и по другому:
Так можно получить категорию любого уровня вложенности начиная со старшей, например если нужно получить категорию вложенную в самого верхнего родителя, то:
Тоже хорошее решение!