Je développe la partie b2b de ma boutique Woocommerce. J'ai réussi à filtrer woocommerce_product_query_meta_query
pour afficher uniquement les produits pour lesquels la section b2b est activée pour les utilisateurs b2b.
Cependant, je ne trouve pas de moyen de masquer une catégorie de produits qui affiche 0 résultat dans le widget des catégories Woocommerce (car il n'y a aucun produit dans cette catégorie avec la partie b2b activée).
J'ai envisagé de réécrire le code du widget Woocommerce par défaut et d'exécuter une requête wp pour chaque catégorie (et sous-catégorie) qui renvoie le nombre de produits dans cette catégorie avec le b2b activé. Mais pour un grand nombre de produits et de catégories, cela semble très inefficace.
Existe-t-il un moyen de masquer les catégories ? vides ? (aucun produit compatible b2b dans la catégorie) dans le widget de catégories Woocommerce ?
Merci pour tout conseil.
Modifier
Pour clarifier ma question?: c'est la fonction que j'utilise pour filtrer les requêtes de produits afin d'afficher uniquement les produits avec _eda_display_in_b2b
元設置為yes
?:?
function show_only_b2b_products( $meta_query, $query ) { if ( is_admin() || ! is_user_logged_in() || ! is_b2b_user() ) { return $meta_query; } $meta_query[] = array( 'key' => '_eda_display_in_b2b', 'value' => 'yes', 'compare' => '=' ); return $meta_query; } add_filter( 'woocommerce_product_query_meta_query', 'show_only_b2b_products', 10, 2 );
Exemple?: https://klon.vozikyprozivot.cz/kategorie-produktu/pridavne-pohony/
Cette catégorie n'est pas vide pour les clients réguliers et les utilisateurs non connectés. Mais pour les clients b2b, il n’y a aucun produit à afficher. Je dois donc masquer ce widget de catégorie pour les clients b2b.
Si vous faites référence au widget des catégories de produits, il existe un paramètre permettant de masquer les catégories vides?:
Si vous faites référence à autre chose, veuillez fournir une URL vers un exemple de page et l'état du système de votre site. Vous pouvez le trouver via WooCommerce > Statut. Sélectionnez Obtenir le rapport système, puis Copier pour obtenir de l'aide. Une fois terminé, veuillez le coller dans votre réponse.
J'espère que cela vous aidera.
======Modifier======
Je pense que pour le problème ci-dessus, vous pouvez utiliser le crochet de catégorie wc et supprimer la catégorie. Veuillez vérifier le code ci-dessous?:
//* 當小部件以下拉列表顯示時使用 add_filter( 'woocommerce_product_categories_widget_dropdown_args', 'rv_exclude_wc_widget_categories' ); //* 當小部件以列表顯示時使用 add_filter( 'woocommerce_product_categories_widget_args', 'rv_exclude_wc_widget_categories' ); function rv_exclude_wc_widget_categories( $cat_args ) { //添加邏輯來檢查類別是否有產(chǎn)品,并創(chuàng)建ID數(shù)組,并用該數(shù)組替換下面的數(shù)組。 $cat_args['exclude'] = array('55','68'); // 插入您希望排除的產(chǎn)品類別ID return $cat_args; }
Dans le code ci-dessus, je pense que vous pouvez faire la logique et vérifier si la catégorie contient des produits et créer un tableau d'identifiants pour les catégories non-produits.
De cette fa?on, vous pouvez exclure la catégorie des listes et des listes déroulantes.
J'espère que cela vous aidera.
Avec beaucoup d'aide de Harshit Vaid, j'ai réussi à résoudre ce problème?:
add_filter( 'woocommerce_product_categories_widget_dropdown_args', 'eda_exclude_wc_widget_categories' ); add_filter( 'woocommerce_product_categories_widget_args', 'eda_exclude_wc_widget_categories' ); function eda_exclude_wc_widget_categories( $cat_args ) { $args = array( 'taxonomy' => 'product_cat', 'hide_empty' => 0 ); $all_categories = get_categories( $args ); $category_exclude_list = array(); foreach ( $all_categories as $cat ) { if ( $cat->category_parent == 0 ) { $category_id = $cat->term_id; $product_args = array( 'posts_per_page' => - 1, 'post_type' => 'product', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => $category_id, 'field' => 'term_id', 'operator' => 'IN' ) ), 'meta_query' => array( array( 'key' => '_eda_display_in_b2b', 'value' => 'yes' ) ) ); $query = new WP_Query( $product_args ); $count = $query->post_count; if ( $count == 0 ) { array_push( $category_exclude_list, $category_id ); } } } $cat_args['exclude'] = $category_exclude_list; return $cat_args; }