web-dev-qa-db-fra.com

Woocommerce Product Widget - masquez les catégories qui n'ont pas de produits en stock

J'utilise WooCommerce sur mon site Wordpress et un widget dans la barre latérale affiche toutes les catégories de produits. Il est configuré pour masquer les catégories vides, et cela fonctionne bien. Toutefois, il affiche toujours les catégories ne contenant que des produits en rupture de stock - que je souhaiterais modifier.

Explication technique: les produits WooCommerce sont un type de publication personnalisé (product), les catégories de produits sont une taxonomie personnalisée (product_cat) et le décompte des stocks est un champ personnalisé des produits (_stock). Le widget Catégories de produits WooCommerce les montre à l'aide de wp_list_categories(). J'ai essayé de fouiller dans un code pour rechercher un appel de filtre auquel je pouvais m'accrocher, mais je n'ai pas réussi à en trouver un.

Y a-t-il un bon moyen de faire cela sans modifier le code principal ou le code WooCommerce? Peut-être un crochet/filtre quelque part que j'ai manqué qui permettrait de vérifier la valeur du champ personnalisé?

3
olex

Utilisez les filtres woocommerce_product_categories_widget_args et woocommerce_get_availability dans une fonction personnalisée pour filtrer le widget de catégories de produits pour les produits en rupture de stock.

Voyez ce que vous pouvez faire en utilisant ces filtres et postez le code ici si vous êtes bloqué.

Voici quelques codes de mon site qui peuvent vous aider à démarrer.

add_filter( 'woocommerce_product_categories_widget_args', 'wpsites_exclude_product_cat_widget' );

function wpsites_exclude_product_cat_widget( $args ) {

$args['exclude'] = array('16','46');

return $args;
}

Voici tous les crochets pour WooCommerce

4
Brad Dalton

Je ne suis pas sûr que cela soit possible car je ne pense pas qu'il y ait un endroit dans wp_list_categories() qui permettrait de vérifier le statut des messages/produits de la catégorie. Même s'il y en avait, il faudrait interroger de nombreux produits dans TOUTES les catégories, ce qui serait très inefficace.

Vous pouvez, peut-être , remplacer le WC_Product_Cat_Dropdown_Walker et y vérifier.

La fonction responsable semble accepter un autre Walker:

/**
 * Walk the Product Categories.
 *
 * @return mixed
 */
function wc_walk_category_dropdown_tree() {
    global $woocommerce;

    if ( ! class_exists( 'WC_Product_Cat_Dropdown_Walker' ) )
        include_once( WC()->plugin_path() . '/includes/walkers/class-product-cat-dropdown-walker.php' );

    $args = func_get_args();

    // the user's options are the third parameter
    if ( empty( $args[2]['walker']) || !is_a($args[2]['walker'], 'Walker' ) )
        $walker = new WC_Product_Cat_Dropdown_Walker;
    else
        $walker = $args[2]['walker'];

    return call_user_func_array(array( &$walker, 'walk' ), $args );
}

Donc, si vous dupliquez le widget, vous pouvez apparemment changer

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o
            ) );

à

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o,
                                'walker'             => 'InStock_Categories'
            ) );

Ensuite, vous seriez responsable de la création et de l’inclusion d’une classe InStock_Categories Walker. Totalement non testé, mais juste en jetant quelques idées là-bas.

2
helgatheviking

Si vous accédez à WooCommerce => Paramètres et sélectionnez l'onglet "Inventaire", une option vous permettant de "Masquer les articles en rupture de stock du catalogue". Si vous activez cette option, les articles en rupture de stock ne seront pas affichés et si une catégorie ne contient aucun article vendable (en rupture de stock ou sans prix), elle sera également masquée.

Mettre à jour

Ok, j'ai lu 'widget' et je l'ai totalement ignoré dans ma réponse.

Le widget Catégories de produits WooCommerce ne prend pas en charge le filtrage des produits/catégories pour autant que je sache. Donc, pas de crochet ou de filtre que je sache.

Mais vous pouvez facilement copier le fichier unique et le modifier en tant que widget autonome qui ne serait pas écrasé par une mise à niveau de WooCommerce.

J'espère que cela pourra aider.

0
Steve