web-dev-qa-db-ja.com

hide_emptyがfalseであってもget_terms()は空の用語を返しません

空の用語を返すようにget_terms()を作成することはできません。私はさまざまな方法でそれを試しました。

これがコードです:

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

私はすべての可能な方法を試しました:

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

最後の2つの方法もarrayなしで試してみました。何も働いていないようです。投稿があるすべての用語を返しますが、空の用語は返しません。

2
Alex Dumitru

hide_emptyには$terms引数を使用しますが、ループ内の$this_termには使用しません。

また、選択を生成する方法では、メインループのトップレベルの用語をクエリするほうがはるかに効率的です。

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

そして、ループの中にif($term->parent == 0) {...をドロップします。

6
TheDeadMedic

私は問題を見つけました。

私はget_terms()を2回使います。1回は両親用、もう1回は子供用です。子供を手に入れるものにhide_empty=falseを付け加えなかったようです。

0
Alex Dumitru