Accueil » Conseils & tutoriels sites internet » Tutoriels Wordpress » Woocommerce : l’override du panier

Woocommerce : l’override du panier

Avoir la maîtrise totale du panier c’est avoir la maîtrise de tous ses tarifs en fonction de tous les critères qui peuvent se rapporter aux produits. C’est également avoir la possibilité de gérer des prix de manière totalement automatique par rapport à des conditions préalablement déterminées. Le gain de temps en gestion de commandes et de catalogue devient tout de suite très intéressant, surtout lorsque l’on parvient à automatiser des fluctuations de prix selon sa volonté.

Woocommerce nous permet d’effectuer un override des prix en tenant compte de toutes les variations disponibles, en les gérant différemment ou toutes en même temps. Il est donc envisageable de créer une boutique en B2B (aussi bien qu’en B2C) avec une quantité d’attributs énorme sans être contraint d’insérer les prix pour chaque variation.

Pour rappel, Woocommerce classe les variations de produits dans des attributs. Par exemple, un t-shirt aura pour attribut « Taille », et cet attribut aura pour variations S, M, L, XL, etc. C’est ce que Prestashop appelle les « déclinaisons ». Sur Woocommerce, chaque variation peut avoir un prix précis (le T-shirt 3XL coûte plus cher que le modèle taille S).

Imaginons un peu que vous ayez 55000 produits sur une boutique, dont les tarifs doivent fluctuer en fonction de deux paramètres : le type de marquage (sérigraphie, tampographie, etc.) et le nombre de couleurs à marquer (de 1 à 4). Insérer les tarifs pour chaque variation devient alors très chronophage, L’idéal est donc de créer une fonction qui va écraser le calcul des prix dans le panier, sans toucher au prix fixe du produit tel qu’il est inscrit dans la base de données.

Une fonction réécrivant le panier WooCommerce

Tout thème WordPress/Woocommerce possède un fichier functions.php, qui recense toutes les fonctions appelées ou pouvant être appelées sur votre boutique/blog. Il suffit donc d’insérer une fonction sur ce fichier qui permet de modifier le contenu du panier, et par produit s’y trouvant.

Pour davantage de sécurité, veillez comme d’habitude à disposer d’un thème enfant, ou voyez ici comment en créer un.

<?php
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price($cart_object) {
    $custom_price = 50; // Prix overridé 1
    $custom_price2 = 90; // Prix overridé 2
    $custom_price3 = 70; // prix overridé 3
    $custom_price4 = 80; // Prix overridé 4
    $custom_price5 = 90; // Et ainsi de suite, vous pouvez les regrouper dans un tableau array()

    $serigraphie = array ( 'serigraphie', 'Sérigraphie' ); // Stockage de la variable de la variation sérigraphie
    $tampographie = array ( 'tampographie', 'Tampographie' ); // Stockage de la variable de la variation tampographie
    $adhesif = array ( 'adhesif', 'Adhesif' ); // Stockage de la variable de la variation adhésif
    $gravure = array ( 'gravure', 'Gravure' ); // Stockage de la variable de la variation gravure
    $coul1 = array ( '1 couleur', '1_couleur' ); // Stockage de la variable de la variation 1 couleur
    $coul2 = array ( '2 couleurs', '2_couleurs' ); // Stockage de la variable de la variation 2 couleurs
    $coul3 = array ( '3 couleurs', '3_couleurs' ); // Stockage de la variable de la variation 3 couleurs
    $coul4 = array ( '4 couleurs', '4_couleurs' ); // Et ainsi de suite pour chaque variation, il est encore possible de les regrouper dans un tableau array()

    // Boucle pour chaque item dans le panier
    foreach ( $cart_object->cart_contents as $key => $value ) {
        if (array_intersect($serigraphie, $value['variation'])) {
            // Si la variable sérigraphie est détectée dans le tableau des variations du produit dans le panier
            $value['data']->price = $custom_price; // Alors on override le prix.
        } elseif (array_intersect($adhesif, $value['variation'])) {
            // Même test pour adhésif
            $value['data']->price = $custom_price2;
            // Toujours un override du prix, mais différend celui-ci
        } elseif (array_intersect($tampographie, $value['variation'])) {
            // Cette fois-ci pour tampographie
            $value['data']->price = $custom_price2; // Et le prix fluctue !
        }
    }
}

$value[‘variation’] est un tableau contenant sur WC (Woocommerce) toutes les variations validées par l’utilisateur, pour chaque produit. Ce tableau prend tout son sens lorsqu’il est inséré dans une boucle foreach avec pour paramètres $cart_object->cart_contents, qui va traiter tous les produits les uns après les autres.

Des prix dégressifs dans le panier client

Le résultat est bluffant. Voici le même produit, avec des variations différentes. Aucun prix pour les variations n’a été inséré en back-office. Le premier produit a donc le prix de base, les autres fluctuent en fonction des variations sélectionnées.

cart_overrided

On peut donc aisément imaginer des prix dégressifs en fonction des quantités mises au panier, en plus des fluctuations de tarifs impactées par le type de marquage et/ou le nombre de couleurs à marquer. Les informations du panier étant disponibles grâce au fichier class-wc-cart.php dans l’extension Woocommerce (et pas dans votre thème), les variables et tableaux de variables sont donc accessibles à tout développeur digne de ce nom !

Imprimer Imprimer
Suivre Cyssoo:

Développeur - formateur

Je cherche à display errors le monde, vous auriez pas la doc' ? Follow me on Twitter !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.