get_terms: determinar si un término de taxonomía tiene elementos hijos

18 nov 2014, 14:03:46
Vistas: 23K
Votos: 1

Estoy buscando determinar si un término de taxonomía tiene elementos hijos. Mira el siguiente código y te explicaré lo que quiero decir:

<?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 }
} ?>

Este código muestra una lista de todos los términos de taxonomía padre para la taxonomía wpsc_product_category, pero quiero determinar si el término de taxonomía tiene hijos o no, y si es así, agregar la clase parent al header-menu-item correspondiente para poder adjuntarle una función jQuery. ¿No estoy seguro si esto es posible? ¡Cualquier sugerencia sería muy apreciada!

0
Todas las respuestas a la pregunta 2
2

La función get_term_children debería ser útil aquí.

Esta función devuelve un array, ya sea con los términos hijos dentro o vacío. Verificar si este array es verdadero o no mientras iteras te permitirá determinar si debes añadir la clase o no.

<?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
Comentarios

Gracias por tu sugerencia, pero parece que no funciona. He implementado el código, sin efecto ya que la clase parent no se está añadiendo.

user1374796 user1374796
18 nov 2014 15:32:08

@PieterGoosen ¡voilà! Esa edición lo ha solucionado, funcionó de maravilla :)

user1374796 user1374796
18 nov 2014 15:37:45
0

Podrías intentar utilizar get_term_children para generar un array con todos los hijos de esa taxonomía, y luego verificar con empty().

Como devuelve un array vacío, deberías poder hacer algo como esto:

(Necesitarás encontrar el id de tu término, que es un número, y reemplazarlo en la variable $term_id de abajo)

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

if ( !empty( $terms ) && !is_wp_error( $terms ) ){
 // haz lo que necesites
}
18 nov 2014 15:26:48