Offrez un produit sur WooCommerce /
en fonction de la quantité et / ou prix dans le panier

09/06/2015

Pour optimiser le panier moyen de votre site, il peut être intéressant d'offrir un cadeau pour l'achat de X produits. C'est ce que j'ai mis en place sur mon site monbraceletnato.fr et cela marche plutôt bien. Cependant pour communiquer correctement sur cette offre j'ai du faire un développement spécifique. Je vous explique tout

Gagnez / du temps et de l'argent

Avant la mise en place de ce petit dev je glissais dans chaque commande le cadeau. Cependant je recevais beaucoup de coups de fil me demandant si le cadeau sera bien inclus dans le colis (car ce n’était pas notifié dans le résumé de commande).

J’ai donc décidé de remédier à ça avec un développement maison que je vous partage aujourd’hui.

En pratique / comment ca marche

Si la condition pour obtenir la promo n’est pas remplie, on informe l’utilisateur (cela permet d’améliorer le taux d’utilisation de la promo. Si la condition est remplie alors on ajoute le cadeau dans le panier. Si le panier est mis à jour (suppression d’un produit) et que la condition n’est plus remplie alors on re check le panier.

<?php
function promo_product($productPromoID,$minItemBuy,$minPriceBuy){

  $productPromo = get_product($productPromoID);

  // On vérifie si le produit à ofrir est en stock
  if($productPromo->stock == 0 || $productPromo->stock < 0){
    define('PROMO', false);return false;
  }else{
    define('PROMO', true);
  }

  global $woocommerce;

  // On regarde si le produit à offrir est déja dans le panier
  foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];
    if( $productPromoID == $_product->id ) {
      $tools = true;
    }
  }

  // on récupère le nombre de produits dans le panier
  $nbItems = WC()->cart->get_cart_contents_count();

  // on récupère le prix total du panier
  $prix = WC()->cart->cart_contents_total;

  // on verifie si les conditions (minimum produits ) (minimum prix ) (outil pas déjà dans le panuer)
  if( $nbItems > $minItemBuy && $prix >= $minPriceBuy && !isset($tools)){
    WC()->cart->add_to_cart($productPromoID,1);

  }elseif( $nbItems == $minItemBuy && $prix < $minPriceBuy && $tools == true){
    // Si le produit est dans le panier mais la condition n'est plus remplie

    $cart = WC()->instance()->cart;
    $cart_id = $cart->generate_cart_id($productPromoID);
    $cart_item_id = $cart->find_product_in_cart($cart_id);

    // On supprime le cadeau
    if($cart_item_id){
      $cart->set_quantity($cart_item_id,0);
    }

  }elseif($nbItems < $minItemBuy && $nbItems > 0 ){
    // Si la conditions n'est pas remplie alors on affiche un message  
    echo "<div class='woocommerce-message promo-outil-msg'>Achetez un produit supplémentaire pour obtenir un produit gratuit !</div>";  
  }

}
?>

Le principe de la fonction que j’ai développé est assez simple, en premier paramètre indiquez l’ID du produit que vous souhaitez offrir. En deuxième paramètre, indiquez le minimum de produit qu’il faut dans le panier pour que la promo s’applique. En dernier paramètre, il faut ajouter le montant minium total de la commande qui rend la promo applicable. Voilà ce que cela donne quand on appelle la fonction.

<?php 
promo_product(get_field('gift-Product-ID','option'),2,18); 
?>

Vous noterez que pour récupérer l’ID du produit offert j’utilise une fonction héritée de Advanced Custom Field Pro. Cependant vous pouvez faire la même chose avec la fonction add_option() et get_option() l’avantage de ACF c’est que vous allez gagnez du temps et vous épargner la création d’une page d’option.

Si vous avez des questions, n’hésitez pas à me contacter par mail ou par Twitter 😉