web-dev-qa-db-ja.com

その下に商品がなくてもすべてのカテゴリを取得できますか?

私は、商品を持っているすべてのカテゴリを取得しようとしていますが、商品がないカテゴリも取得しています。

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; ?>

注:どちらの場合も、商品がゼロのカテゴリを表示したくありません。

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の問題は here だと思います

// 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 ] );
                }
            }
        }
0

それらに関連する投稿がない場合でも、これはすべてのカテゴリを一覧表示するのが非常に簡単です。

wp_dropdown_categories で次のプロパティをfalseに設定するだけです。方法。

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

これがあなたの問題を解決することを願っています。

0
kapil yadav