get_terms() не возвращает пустые термины, хотя hide_empty установлен как false
1 сент. 2014 г., 14:32:31
Просмотры: 23.8K
Голосов: 4
Я не могу заставить 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'))
Также пробовал последние два варианта без array
. Ничего не работает. Функция возвращает все термины, которые имеют записи, но не возвращает пустые.

Alex Dumitru
753
Комментарии
Все ответы на вопрос
2
1
Вы используете аргумент hide_empty
для $terms
, но не для $this_term
внутри вашего цикла.
Кроме того, учитывая способ генерации вашего select-элемента, было бы гораздо эффективнее просто запрашивать термины верхнего уровня для основного цикла:
$terms = get_terms( 'device', array( 'hide_empty' => false, 'parent' => 0 ) );
И затем убрать условие if($term->parent == 0) {...
внутри вашего цикла.

TheDeadMedic
36.6K
1 сент. 2014 г. 15:07:36
Похожие вопросы