Как получить только родительские термины?

1 авг. 2011 г., 15:03:32
Просмотры: 96.8K
Голосов: 29

Есть ли способ получить только родительские термины из произвольной таксономии или категории?

0
Все ответы на вопрос 5
3
53

Да, просто передайте параметр parent в функцию get_terms при её вызове, как указал Майкл.

Начиная с WordPress 4.5 рекомендуется использовать следующий синтаксис:

$myterms = get_terms( array( 'taxonomy' => 'taxonomy_name', 'parent' => 0 ) );

До версии WP 4.5 использовался такой вариант:

$myterms = get_terms( 'taxonomy_name_here', array( 'parent' => 0 ) );

Это вернёт все термины, у которых значение parent равно 0, то есть термины верхнего уровня.

1 авг. 2011 г. 17:14:29
Комментарии

Возвращает пустой массив для пользовательских таксономий :(

Mamaduka Mamaduka
2 авг. 2011 г. 16:14:23

Связаны ли термины этой таксономии с записью (или пользовательским типом)? Если нет, вам нужно передать параметр hide_empty, установив его в 0, чтобы видеть термины, которые в данный момент не используются.

t31os t31os
2 авг. 2011 г. 16:25:38

Обратите внимание, что это получит только родительский уровень 1, "материнский" термин. Чтобы получить всех предков, используйте get_ancestors(TERM_ID, TAXONOMY, 'taxonomy') https://developer.wordpress.org/reference/functions/get_ancestors/

jave.web jave.web
13 апр. 2017 г. 09:07:16
0
1 авг. 2011 г. 16:03:47
1

для шаблонов электронных писем WooCommerce используйте следующий код:

$terms = get_the_terms( $_product->id , 'product_cat');
    if($terms) {
        foreach( $terms as $term ) {
            $term = get_term_by("id", $term->parent, "product_cat");
            if ($term->parent > 0) {
                $term = get_term_by("id", $term->parent, "product_cat");
            }
            $cat_obj = get_term($term->term_id, 'product_cat');
            $cat_name = $cat_obj->name;
        }
    }
echo '<br />('. $cat_name . ')';
2 сент. 2013 г. 16:26:28
Комментарии

пожалуйста, добавьте объяснение, как ваш код может решить вопрос. Автор не задавал вопрос о шаблонах электронных писем WooCommerce.

iEmanuele iEmanuele
2 сент. 2013 г. 17:34:10
4
 $archive_cats = get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );
24 окт. 2013 г. 11:10:18
Комментарии

Чем это отличается от (уже принятого) ответа, предложенного более двух лет назад?

tfrommen tfrommen
24 окт. 2013 г. 11:31:46

вы видели комментарии к (уже принятому) ответу? если дополнительные ответы не нужны, почему вопрос всё ещё открыт?!

ashraf mohammed ashraf mohammed
12 нояб. 2013 г. 15:42:03

Был единственный запрос относительно того, что термины не отображаются, что не было связано с исходным вопросом. Я ответил на эту проблему в комментарии (поскольку это не влияло на валидность или правильность уже предоставленного ответа).

t31os t31os
28 янв. 2014 г. 15:48:06

Пожалуйста, укажите это в правке. Объясните ваш код.

kaiser kaiser
4 февр. 2014 г. 00:19:25
0

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

Художественная литература (id: 699)
 - Это художественный рассказ.
Нехудожественная литература
 - Название нехудожественной книги
Фэнтези
  -  ...

Нам нужно получить родительский термин таксономии "Книги" текущей записи.

/* Получить название родительского термина таксономии по ID записи */

function get_parent_term_by_post_id($taxname, $taxid=null){

if(isset($taxid)):

    //Получить по ID термина, переданного в функцию
    $parent_tax = get_term_by('id', $taxid, $taxname);

    return $parent_tax ->name; //используйте name, slug или id

else:

     //Получить по ID текущей записи
     $terms = wp_get_post_terms( get_the_id(), $taxname);

     $tax_parent_id = $terms[0]->parent;

     if($tax_parent_id == 0):
      $tax_parent_id = $terms[0]->parent; //получить следующий родительский ID
     endif; 

     $parent_tax = get_term_by('id', $tax_parent_id , $taxname);

     return $parent_tax ->name; //используйте name, slug или id

endif;

}

Затем просто используйте в вашем шаблоне следующим образом:

//введите название таксономии. функция получит данные по ID записи 
echo get_parent_term_name_by_post_id('books'); //вернет "Художественная литература"

или

//по ID термина 
echo get_parent_term_name_by_post_id('books', 699); //вернет "Художественная литература"
19 нояб. 2020 г. 17:10:22