get_terms: determinare se un termine di tassonomia ha figli

18 nov 2014, 14:03:46
Visualizzazioni: 23K
Voti: 1

Sto cercando di determinare se un termine di tassonomia ha figli. Guarda il markup qui sotto e ti spiegherò cosa intendo:

<?php
$terms = get_terms("wpsc_product_category");
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    foreach( get_terms( 'wpsc_product_category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) { ?>
    <li class="header-menu-item" data-hook="<?php echo $parent_term->slug; ?>">
        <a href="<?php echo home_url(); ?>/products/<?php echo $parent_term->slug; ?>"><?php echo $parent_term->name; ?></a>                
    </li>
    <?php }
} ?>

Quindi questo codice mostra un elenco di tutti i termini di tassonomia padre per la tassonomia wpsc_product_category, ma voglio determinare se il termine di tassonomia ha figli o meno, e in caso affermativo aggiungere la classe parent al relativo header-menu-item così posso collegarci una funzione jQuery. Non sono sicuro se questo sia possibile. Qualsiasi suggerimento sarebbe molto apprezzato!

0
Tutte le risposte alla domanda 2
2

La funzione get_term_children dovrebbe essere utile in questo caso.

Questa restituisce un array, che può contenere i termini figli oppure essere vuoto. Verificando se questo array è valutato come vero o falso durante il ciclo, potrai determinare se aggiungere o meno la classe.

<?php
    $terms = get_terms('wpsc_product_category');
    if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    foreach( get_terms( 'wpsc_product_category', array( 'hide_empty' => false, 'parent' => 0 ) ) as $parent_term ) {
        $term_children = get_term_children($parent_term->term_id, 'wpsc_product_category'); ?>
        <li class="header-menu-item<?php echo ($term_children ? ' parent' : ''); ?>" data-hook="<?php echo $parent_term->slug; ?>">
            <a href="<?php echo home_url(); ?>/products/<?php echo $parent_term->slug; ?>"><?php echo $parent_term->name; ?></a>                
        </li>
    <?php }
} ?>
18 nov 2014 15:25:13
Commenti

Grazie per il tuo suggerimento, ma sembra non funzionare? Ho implementato il codice, senza alcun effetto visto che la classe parent non viene aggiunta?

user1374796 user1374796
18 nov 2014 15:32:08

@PieterGoosen ecco fatto! Questa modifica ha risolto il problema, ha funzionato perfettamente :)

user1374796 user1374796
18 nov 2014 15:37:45
0

Potresti provare a utilizzare get_term_children per generare un array di tutti i figli di quella tassonomia, e poi verificare con empty().

Poiché restituisce un array vuoto, dovresti essere in grado di fare qualcosa come questo:

(Dovrai scoprire l'id del tuo termine, che è un numero, e sostituirlo nella variabile $term_id qui sotto)

$term_id = 2
$taxonomy_name = 'wpsc_product_category';
$terms = get_term_children( $term_id, $taxonomy_name );

if ( !empty( $terms ) && !is_wp_error( $terms ) ){
 // fai le tue operazioni
}
18 nov 2014 15:26:48