Mientras buscaba lo mismo pero para obtener los términos de una publicación, finalmente compilé esto, y me funciona.
Lo que hace:
• obtiene todos los términos de un nombre de taxonomía para una publicación específica.
• para una taxonomía jerárquica con dos niveles (por ejemplo, nivel1: 'país' y nivel2: 'ciudades'), crea un h4 con el nivel1 seguido de una lista ul de nivel2 y esto para todos los elementos del nivel 1.
• Si la taxonomía no es jerárquica, solo creará una lista ul de todos los elementos.
Aquí está el código (lo escribo para mí, así que traté de ser lo más genérico posible pero ...):
function finishingLister($heTerm){
$myterm = $heTerm;
$terms = get_the_terms($post->ID,$myterm);
if($terms){
$count = count($terms);
echo '<h3>'.$myterm;
echo ((($count>1)&&(!endswith($myterm, 's')))?'s':"").'</h3>';
echo '<div class="'.$myterm.'Wrapper">';
foreach ($terms as $term) {
if (0 == $term->parent) $parentsItems[] = $term;
if ($term->parent) $childItems[] = $term;
};
if(is_taxonomy_hierarchical( $heTerm )){
foreach ($parentsItems as $parentsItem){
echo '<h4>'.$parentsItem->name.'</h4>';
echo '<ul>';
foreach($childItems as $childItem){
if ($childItem->parent == $parentsItem->term_id){
echo '<li>'.$childItem->name.'</li>';
};
};
echo '</ul>';
};
}else{
echo '<ul>';
foreach($parentsItems as $parentsItem){
echo '<li>'.$parentsItem->name.'</li>';
};
echo '</ul>';
};
echo '</div>';
};
};
Entonces, finalmente, llamas a la función con esto (obviamente, reemplazas mi_taxonomía por la tuya): finishingLister('my_taxonomy');
No pretendo que sea perfecto, pero como dije, funciona para mí.