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

Да, просто передайте параметр 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
, то есть термины верхнего уровня.

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

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

используйте параметр 'parent':
http://codex.wordpress.org/Function_Reference/get_terms
или
http://codex.wordpress.org/Function_Reference/get_categories

для шаблонов электронных писем 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 . ')';

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

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

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

Для этой демонстрации предположим, что у нас есть таксономия под названием "Книги". И у нас может быть иерархия:
Художественная литература (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); //вернет "Художественная литература"
