web-dev-qa-db-fra.com

Obtenir toutes les catégories même sans produits en dessous?

J'essaie d'obtenir toutes les catégories qui ont des produits mais aussi celles qui n'ont pas de produits.

WordPress version 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 
      )
);

Même get_terms affiche des catégories vides avec le code ci-dessous.

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

Remarque: Dans les deux cas, ne souhaitez pas afficher les catégories ne contenant aucun produit.

1

wc_product_dropdown_categories() fera l'affaire à la place de wp_dropdown_categories().

Pour la partie get_terms

en remplaçant

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

avec

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

résolu mon problème.

Pas sûr mais je pense que le problème avec get_terms est ici

// 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

C'est très simple de lister toutes les catégories, même si aucune publication n'est associée à celles-ci.

Il vous suffit de définir la propriété suivante sur false dans wp_dropdown_categories . méthode.

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

J'espère que cela résoudra votre problème.

0
kapil yadav