Come posso ottenere solo i termini genitori?

1 ago 2011, 15:03:32
Visualizzazioni: 96.8K
Voti: 29

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

0
Tutte le risposte alla domanda 5
3
53

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.

1 ago 2011 17:14:29
Commenti

Restituisce un array vuoto per le tassonomie personalizzate :(

Mamaduka Mamaduka
2 ago 2011 16:14:23

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.

t31os t31os
2 ago 2011 16:25:38

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/

jave.web jave.web
13 apr 2017 09:07:16
1

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 . ')';
2 set 2013 16:26:28
Commenti

per favore aggiungi una spiegazione su come il tuo codice potrebbe risolvere la domanda. OP non ha fatto una domanda riguardo ai template delle email di woocommerce.

iEmanuele iEmanuele
2 set 2013 17:34:10
4
$archive_cats = get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );
// Recupera i termini della tassonomia 'archivecat' ordinati per conteggio
// Nasconde i termini vuoti e seleziona solo i termini principali (senza genitore)
24 ott 2013 11:10:18
Commenti

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

tfrommen tfrommen
24 ott 2013 11:31:46

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

ashraf mohammed ashraf mohammed
12 nov 2013 15:42:03

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).

t31os t31os
28 gen 2014 15:48:06

Per favore, affronta questo in una modifica. Spiega il tuo codice.

kaiser kaiser
4 feb 2014 00:19:25
0

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
19 nov 2020 17:10:22