Woo Commerce – Coupon spécial 3 produits achetés, 1 offert

Aujourd’hui, présentation d’une fonctionnalité que j’ai mise en place récemment sur une boutique en ligne développée avec Woo Commerce, l’extension WordPress de vente en ligne. Il s’agissait d’offrir au client le produit le moins cher à partir de trois produits achetés.

La problématique

Après avoir creusé un peu les extensions WooCommerce Dynamic Pricing et Pricing Deals for WooCommerce, je ne trouvais pas de possibilités d’offrir un produit après l’achat de plusieurs produits, quelque soit les produits achetés. Ces extensions proposent la fonctionnalité BOGO (Buy One Get One) mais ça veut dire offrir automatiquement un produit B quand un produit A est acheté. De mon côté, je voulais pouvoir offrir le produit le moins cher du panier, quand celui contient au moins trois produits, et ce, quelque soit les produits dans le panier.

Je suis alors tombé sur cet article (en anglais) et je présente et traduis donc ici en français la méthode présentée, simple et efficace. Elle consiste à utiliser les hook de Woo Commerce pour ajouter une fonctionnalité additionnelle directement au panier de Woo Commerce, puis, à utiliser un coupon pour appliquer ou non la réduction.

La méthode

Ajout de la fonctionnalité au panier

Ajouter d’abord au fichier functions.php de votre thème la fonction suivante, c’est la fonctionnalité en plus ajoutée au panier de la boutique :

// Hook avant le calcul du tarif - Coupon 3achetes
add_action('woocommerce_cart_calculate_fees' , 'buy3_coupon');

/**
* Ajouter la réduction du coupon "3achetes"
* @param WC_Cart $cart
*/

function buy3_coupon( WC_Cart $cart ){

// ajouter le/les coupon(s) ici
$buy3_coupons = array('3achetes', 'autre_coupon');

// retourner un résultat si le panier contient moins de trois produits
if( $cart->cart_contents_count < 3 ){ return; } $applied_coupons = $cart->get_applied_coupons(); 
$matches = array_intersect($buy3_coupons, $applied_coupons);

// retour si aucun coupon
if (empty($matches)) return;

// parcourir les produits du panier et trouver le moins cher
foreach ( $cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$product_price[] = $_product->get_price_including_tax();
}

$cheapest = min($product_price);

// ajouter la ligne de réduction au panier et soustraire le prix du produit le moins cher
$cart->add_fee( 'Réduction 3 achetés un offert', -$cheapest);
}

Ajout du coupon

Ajouter ensuite le coupon « 3ACHETES » dans Woo Commerce via Woo Commerce/Codes promos. Il est important que le type de remise du coupon soit « Remise panier fixe » et que le montant du code soit 0. Le reste est facultatif. Il est également important de bien nommer le coupon et de ne pas en charger le nom ensuite, sinon il ne sera plus détecté. En effet, l’existence ou non des coupons est vérifié avec leur id, mais celui reste le même, même si on change le nom du coupon.

Fonctionnement

La fonction ajoutée au fichier functions.php fonctionne comme suit. Elle détecte d’abord l’existence d’un/de coupon(s) spécifique(s) dans votre boutique. S’il(s) existe(nt), alors elle applique la réduction en soustrayant le prix du produit le moins cher et ajoute une ligne dans le panier pour indiquer que la réduction est appliquée.

En soit, le coupon ne fait rien, mais il permet d’activer/désactiver la réduction à tout moment. Si je désactive le coupon « 3ACHETES », alors la réduction ne s’appliquera plus.

5 commentaires

  1. Bonsoir, c’est super ! C’est exactement ce dont j’avais besoin. Par contre j’aimerais limiter le coupon à une catégorie d’articles (pour un restaurant, faire valoir l’offre uniquement sur les pizzas hors boissons et autres produits). J’ai essayer de sélectionner dans woocommerce la catégorie des pizzas et exclure les autres catégorie mais en vain. Peut-être qu’il faudrait modifier le code.. une piste ?

    1. Bonjour,
      Désolé de la réponse tardive. Je ne fais plus de développement web actuellement et je ne suis pas en mesure de retourner dans le code pour l’améliorer. Content de savoir que l’article a pu t’aider.

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.