WordPress как на ладони
wordpress jino

Как получить элемент таксономии верхнего уровня для в котором находится указанная запись (пост)?

Есть таксономия tax, древовидная. Она прикреплена к постам (записям типа post).

Запись всегда прикрепляется к последнему уровню таксономии. Например, уровни такие: ягода > малина. Пост прикреплен к термину малина.

Вопрос:

Как получить самый родительский (самый верхний, самый первый) элемент таксономии (термин). Т.е. как получить термин ягода - термин верхнего уровня из указанной таксономии tax для текущего поста в цикле.

И желательно, чтобы я мог указать для какого поста мне нужно получить термин.

Заранее спасибо!

1
Гость 10 месяцев назад
  • 0
    Kama4489

    Родной функции в WordPress такой нет. Но это поправимо...

    /**
     * Получает термин верхнего уровня, для указанного или текущего поста в цикле
     * @param  string          $taxonomy      Название таксономии
     * @param  integer/object  [$post_id = 0] ID или объект поста
     * @return string/wp_error Объект термина или false
     */
    function get_top_term( $taxonomy, $post_id = 0 ) {
    	if( isset($post_id->ID) ) $post_id = $post_id->ID;
    	if( ! $post_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;
    }

    Пример того, как нужно использовать функцию:

    $top_term = get_top_term( 'category' );
    echo $top_term->name; // название термина
    
    /* Объект $top_term содержит такие данные
    WP_Term Object
    (
    	[term_id] => 562
    	[name] => Записи
    	[slug] => zapisi
    	[term_group] => 0
    	[term_taxonomy_id] => 582
    	[taxonomy] => tax
    	[description] => 
    	[parent] => 0
    	[count] => 1
    )
    */
    Леонэл 10 месяцев назад

    Супер! Спасибо, то что нужно!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.