get_terms() no devuelve términos vacíos aunque hide_empty sea false

1 sept 2014, 14:32:31
Vistas: 23.8K
Votos: 4

No logro hacer que get_terms() devuelva los términos vacíos y lo he intentado de varias formas.

Aquí está el código:

$terms = get_terms('device',array('hide_empty' => 0));
foreach($terms as $term) {
        if($term->parent == 0) {
            if($i++ != 0) echo '</optgroup>'; echo '<optgroup label="'.$term->name.'">';
            $id = $term->term_id;
            $args = array("child_of"=>$id);
            $this_term = get_terms('device',$args);
            foreach($this_term as $the_term) { 
                $term_name = str_replace($term->name,'',$the_term->name);
                echo '<option value="'.$the_term->term_id.'">'.$the_term->name.'</option>';
            }
        }
    }

He probado todas las formas posibles:

$terms = get_terms('device',array('hide_empty' => false))
$terms = get_terms('device',array('hide_empty' => 0))
$terms = get_terms('device',array('hide_empty=false'))
$terms = get_terms('device',array('hide_empty=0'))

También probé las dos últimas formas sin array. Nada parece funcionar. Devuelve todos los términos que tienen entradas, pero ninguno vacío.

3
Comentarios

¿Has probado con el parámetro 'get' => 'all'?

Tomás Cot Tomás Cot
1 sept 2014 15:05:37

Encontré el culpable. Estaba usando get_terms() dos veces y lo olvidé, así que no agregué hide_empty a la segunda función.

Alex Dumitru Alex Dumitru
1 sept 2014 15:06:51

Ok, me alegra escuchar eso.

Tomás Cot Tomás Cot
1 sept 2014 15:08:16
Todas las respuestas a la pregunta 2
1
10

Estás usando el argumento hide_empty para $terms, pero no para $this_term dentro de tu bucle.

Además, con la forma en que estás generando tu select, sería mucho más eficiente simplemente consultar los términos de nivel superior para el bucle principal:

$terms = get_terms( 'device', array( 'hide_empty' => false, 'parent' => 0 ) );

Y luego eliminar if($term->parent == 0) {... dentro de tu bucle.

1 sept 2014 15:07:36
Comentarios

Sí, esto se ve mucho mejor. Ya he hecho el cambio. ¡Gracias!

Alex Dumitru Alex Dumitru
1 sept 2014 15:09:22
0

He encontrado el problema.

Estoy usando get_terms() dos veces, una para los términos padres y otra para los hijos. Parece que no añadí hide_empty=false a la que obtiene los términos hijos.

1 sept 2014 15:05:02