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