get_terms() nu returnează termenii goi chiar dacă hide_empty este false

1 sept. 2014, 14:32:31
Vizualizări: 23.8K
Voturi: 4

Nu reușesc să fac get_terms() să returneze termenii goi și am încercat în mai multe moduri.

Iată codul:

$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>';
            }
        }
    }

Am încercat toate modalitățile posibile:

$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'))

De asemenea, am încercat ultimele două modalități fără array. Nimic nu pare să funcționeze. Returnează toți termenii care au postări, dar niciunul gol.

3
Comentarii

Ai încercat cu parametrul 'get' => 'all'?

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

Am găsit problema. Foloseam get_terms() de două ori și am uitat de asta, așa că nu am adăugat hide_empty în a doua funcție.

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

Ok, mă bucur să aud asta.

Tomás Cot Tomás Cot
1 sept. 2014 15:08:16
Toate răspunsurile la întrebare 2
1
10

Folosești argumentul hide_empty pentru $terms, dar nu și pentru $this_term în interiorul buclei tale.

De asemenea, cu modul în care generezi selecția, ar fi mult mai eficient să interoghezi doar termenii de nivel superior pentru bucla principală:

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

Și apoi să elimini condiția if($term->parent == 0) {... din interiorul buclei tale.

1 sept. 2014 15:07:36
Comentarii

Da, arată mult mai bine. Am făcut deja modificarea. Mulțumesc!

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

Am găsit problema.

Folosesc get_terms() de două ori, o dată pentru părinți și o dată pentru copii. Se pare că nu am adăugat hide_empty=false la cel care obține copiii.

1 sept. 2014 15:05:02