Получение всех категорий даже без продуктов под ним?

Я пытаюсь получить все категории, которые имеют продукты, но также и категории, которые не имеют продуктов.

Версия WordPress 4.6.1

wp_dropdown_categories( array( 'class' => 'product-category-field', 'id' => 'product-category', 'name' => 'category', 'taxonomy' => 'product_cat', 'selected' => get_query_var('product_cat' ), 'hierarchical' => 1, 'hide_empty' => 1, 'value_field' => 'slug', 'show_count' => 1 ) ); 

Даже get_terms отображает пустые категории с приведенным ниже кодом.

 <?php $terms = get_terms('product_cat', array( 'parent' => 0 )); if( $terms ): $original_query = $wp_query; foreach ( $terms as $key => $term ): ?> <li> <?php echo $term->name; ?> <ul> <?php $child_terms = get_terms( 'product_cat', array( 'child_of' => $term->term_id, 'hide_empty' => true ) ); foreach ( $child_terms as $child_term ) { $re_child_terms = get_terms( 'product_cat', array( 'child_of' => $child_term->term_id, 'hide_empty' => true ) ); if ( ! $re_child_terms ){ ?> <li> <?php echo $child_term->name; ?> </li> <?php } } ?> </ul> </li> <?php endforeach; $wp_query = null; $wp_query = $original_query; ?> </ul> <?php endif; ?> 

Примечание. В обоих случаях не нужно отображать категории с нулевыми продуктами.

Solutions Collecting From Web of "Получение всех категорий даже без продуктов под ним?"

Это очень просто, чтобы перечислить все категории, даже если у них нет сообщений, связанных с ними.

Вам просто нужно установить следующее свойство в false в wp_dropdown_categories . метод.

 'hide_empty' => 0, 'hide_if_empty' => 1 

Надеюсь, это решит вашу проблему.

wc_product_dropdown_categories() выполнит трюк вместо wp_dropdown_categories() .

Для части get_terms

путем замены

 $re_child_terms = get_terms( 'product_cat', array( 'child_of' => $child_term->term_id, 'hide_empty' => true ) ); if ( ! $re_child_terms ){ 

с

  $re_child_terms = get_term_children( $child_term->term_id, 'product_cat' ); if ( $child_term->count > 0 && empty( $re_child_terms ) ){ 

решил мою проблему.

Не уверен, но я думаю, что проблема с get_terms здесь

 // Make sure we show empty categories that have children. if ( $hierarchical && $args['hide_empty'] && is_array( $terms ) ) { foreach ( $terms as $k => $term ) { if ( ! $term->count ) { $children = get_term_children( $term->term_id, $term->taxonomy ); if ( is_array( $children ) ) { foreach ( $children as $child_id ) { $child = get_term( $child_id, $term->taxonomy ); if ( $child->count ) { continue 2; } } } // It really is empty. unset( $terms[ $k ] ); } } }