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

19

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

Mamaduka
источник

Ответы:

38

Да, просто передайте родительский параметр тому, get_termsкогда вы его вызываете, как указал Майкл.

Начиная с WP 4.5, это рекомендуемое использование:

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

До WP 4.5 это было использование по умолчанию:

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

Вернет все термины, которые имеют родительское значение 0, т.е. условия высшего уровня.

t31os
источник
Он возвращает пустой массив для пользовательских таксономий :(
Mamaduka
Связаны ли термины в этой таксономии с постом (или пользовательским типом)? Если нет, вам нужно будет передать hide_emptyпараметр, установив его 0также, чтобы вы могли видеть термины, которые в настоящее время не используются.
t31os
Обратите внимание, что это получит только родительский уровень 1, термин «мать». Чтобы найти всех предков, используйте get_ancestors(TERM_ID, TAXONOMY, 'taxonomy') developer.wordpress.org/reference/functions/get_ancestors
jave.web
2

для шаблонов электронной почты 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 . ')';
3243
источник
5
пожалуйста, добавьте некоторые объяснения о том, как ваш код может решить вопрос. OP не задавался вопросом о шаблонах электронной почты woocommerce.
iEmanuele
1
 $archive_cats= get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );
Ашраф Мухаммед
источник
3
Чем это отличается от (уже принятого) ответа, предложенного более двух лет назад?
от
Вы видели комментарии к (уже принятому) ответу? если больше нет ответов не пригодятся, почему вопрос до сих пор открыт ?!
ашраф Мухаммед
Был один запрос в отношении неиспользуемых терминов, который не имел отношения к исходному вопросу, я обратился к этой проблеме в ответном комментарии (поскольку он не имел отношения к действительности или правильности уже предоставленного ответа).
t31os
1
Пожалуйста, обратитесь в редакцию. Объясни свой код.
Кайзер