Come posso ottenere solo i termini genitori?
Esiste un modo per ottenere solo i termini genitori da una tassonomia personalizzata o categoria?

Sì, basta passare il parametro parent a get_terms
quando lo chiami, come ha indicato Michael.
Dalla versione 4.5 di WordPress questo è l'utilizzo consigliato:
$myterms = get_terms( array( 'taxonomy' => 'taxonomy_name', 'parent' => 0 ) );
Prima di WP 4.5 questo era l'utilizzo predefinito:
$myterms = get_terms( 'taxonomy_name_here', array( 'parent' => 0 ) );
Restituirà tutti i termini che hanno un valore parent uguale a 0
, cioè i termini di livello superiore.

I termini di quella tassonomia sono associati a un post (o tipo personalizzato)? In caso contrario, dovrai passare il parametro hide_empty
, impostandolo anche a 0
, in modo da poter vedere i termini attualmente non utilizzati.

Nota che questo otterrà solo il livello genitore 1, il termine "madre". Per recuperare tutti gli antenati, usa get_ancestors(TERM_ID, TAXONOMY, 'taxonomy')
https://developer.wordpress.org/reference/functions/get_ancestors/

usa il parametro 'parent':
http://codex.wordpress.org/Function_Reference/get_terms
oppure
http://codex.wordpress.org/Function_Reference/get_categories

per i template delle email di WooCommerce utilizza il seguente codice:
$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 . ')';

In cosa differisce dalla risposta (già accettata) proposta più di due anni fa?

hai visto i commenti sulla risposta (già accettata)? se nessun'altra risposta è utile, perché la domanda è ancora aperta?!

C'era una singola query riguardante termini che non venivano visualizzati, non correlata alla domanda originale; ho affrontato quel problema in un commento di risposta (poiché non aveva alcuna rilevanza sulla validità o correttezza della risposta già fornita).

Per questa dimostrazione, assumeremo di avere una tassonomia chiamata "Libri". E potremmo avere una gerarchia come:
Narrativa (id: 699)
- Questa è una storia di narrativa.
Saggistica
- Titolo di saggistica
Fantasy
- ...
Vogliamo ottenere il termine genitore della tassonomia "Libri" del post corrente.
/* Ottieni il Nome del Termine Genitore della Tassonomia tramite l'ID del post */
function get_parent_term_by_post_id($taxname, $taxid=null){
if(isset($taxid)):
//Ottieni tramite l'ID del termine passato nella funzione
$parent_tax = get_term_by('id', $taxid, $taxname);
return $parent_tax ->name; //usa name, slug, o id
else:
//Ottieni tramite l'ID del post della pagina corrente
$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; //ottieni il prossimo ID genitore
endif;
$parent_tax = get_term_by('id', $tax_parent_id , $taxname);
return $parent_tax ->name; //usa name, slug, o id
endif;
}
Quindi puoi eseguirlo nel tuo template in questo modo:
//inserisci il nome della tassonomia personalizzata. otterrà tramite l'ID del post
echo get_parent_term_name_by_post_id('libri'); //restituisce Narrativa
oppure
//tramite l'ID del termine
echo get_parent_term_name_by_post_id('libri', 699); //restituisce Narrativa
