Blog Web & Design

Woocommerce, comment offir un produit après l’ajout d’un code promo ?

developpeur woocommerce

Parfois dans WooCommerce, nous avons besoin d’offrir certains avantages au moment de l’achat et l’utilisation des codes promos est en général une solution suffisante. Toutefois lorsqu’on souhaite offrir autre chose qu’une réduction monétaire, il faut souvent se tourner vers de la modification plus poussée du thème woocommerce.

Dans notre exemple, nous avons mis en place un code promotionnel nommé « PREMIEREFOIS » qui, une fois saisi dans le panier, nous ajoute un produit offert.

Pour réaliser ce type d’offre, vous allez avoir besoin dans un premier temps de créer un produit gratuit, celui-ci ne sera pas listé dans le catalogue, je vais vous montrer comment faire.

1. Ajouter un produit gratuit dans WooCommerce

Pour ce faire, vous allez devoir tout simplement créer un produit qui ne coute rien, c’est à dire que le prix est égal à 0,
et récupérer son identifiant ( ID ) qui nous sera utile par la suite, vous le trouverez dans la liste des produits comme ceci :

Trouver numéro ID d'un produit WooCommerce
Trouver numéro ID d’un produit WooCommerce

Masquer un produit du catalogue woocommerce

Afin d’éviter que le produit soit affiché dans notre boutique, nous devons le masquer. Il y à une option un peu cachée dans WooCommerce, au niveau du bloc de publication, un lien nommé « visibilité du catalogue » et qui propose plusieurs options, donc celle de cacher le produit, cliquez dessus :

Masquer un produit du catalogue woocommerce
Masquer un produit du catalogue woocommerce

Rendre un produit unique dans le panier

Enfin pour éviter l’ajout de plusieurs pluduits gratuits, vous devez cocher la case « Vendre individuellement » pour n’autoriser qu’un exemplaire unique d’un article dans une commande.

Interdire plusieur produits identiques dans le panier Woocommerce
Interdire plusieur produits identiques dans le panier Woocommerce

Une fois notre produit créé et bien configuré il ne nous reste plus qu’à rentrer dans le code. Pour cela vous allez devoir modifier le fichier functions.php de votre theme.

La fonction WooCommerce

Personnalisez ces 2 fonctions avec votre code promo et l’ID de votre produit gratuit

// Configuration :

function mrsize_produit_gratuit_coupon_nom(){
    return 'premierefois'; // Titre du coupon
}
function mrsize_produit_gratuit_id(){
    return 825; // ID du produit gratuit
}

Les lignes suivantes vont permettre d’ajouter le produit gratuit à l’ajout du code promo defini plus haut :


// Hooks :

add_action( 'woocommerce_applied_coupon', 'mrsize_ajouter_produit_gratuit_avec_coupon' );
function mrsize_ajouter_produit_gratuit_avec_coupon( $code_coupon ) {

    $produit_gratuit_id             = mrsize_produit_gratuit_id(); 
    $produit_gratuit_coupon_nom     = mrsize_produit_gratuit_coupon_nom();

    if ( $produit_gratuit_coupon_nom === $code_coupon ) {
        WC()->cart->add_to_cart( $produit_gratuit_id );
    } 
}

et de le supprimer si le coupon n’est plus présent :

add_action('template_redirect','mrsize_enlever_produit_gratuit_sans_coupon'); 
function mrsize_enlever_produit_gratuit_sans_coupon(){

    $produit_gratuit_id             = mrsize_produit_gratuit_id(); 
    $produit_gratuit_coupon_nom     = mrsize_produit_gratuit_coupon_nom();

    // Recuperer l'ID du produit dans le panier :
    $produit_panier_id              = WC()->cart->generate_cart_id( $produit_gratuit_id );
    $produit_panier_article_cle     = WC()->cart->find_product_in_cart( $produit_panier_id );

    $coupons_appliques              = WC()->cart->get_applied_coupons();

    // Si aucun coupon n'est appliqué, on supprime le produit gratuit :
    if( count( $coupons_appliques ) === 0 ) WC()->cart->remove_cart_item( $produit_panier_article_cle );

    // Si au moins un coupon est appliqué :
    if( count( $coupons_appliques ) > 0 ){

        foreach ( $coupons_appliques as $coupon_applique ){

            // Si le coupon n'est le bon, on supprime le produit gratuit :
            if( $coupon_applique !== $produit_gratuit_coupon_nom ){

                // on supprime le produit gratuit :
                if ( $produit_panier_article_cle ) WC()->cart->remove_cart_item( $produit_panier_article_cle );
            }

        }

    }
}

Télécharger le code

Pour un aperçu de l’ensemble du code, rendez-vous sur GitHub.


Cette article vous a-t’il été utile ? Si vous avez des questions, n’hésitez pas à les poser dans les commentaires ou par e-mail.

Dernière mise à jour le Auteur : Thomas Dufranne

Ce contenu vous a-t-il été utile ?

Merci pour votre avis !

Si vous pensez pouvoir aider d'autres personnes, pensez à partager le contenu

Merci pour votre avis !

Désolé que vous n'ayez pas trouvé votre réponse.

Je vous invite à me poser vos question par commentaire ou par e-mail !

2 réponses sur “Woocommerce, comment offir un produit après l’ajout d’un code promo ?”

Mandes

Bonjour,
Merci pour ce partage et pour votre travail.
Si je fixe un minimum de 50€ d’achat pour que le code promo soit valable, le produit offert s’ajoute logiquement au panier lorsque le montant de la commande atteint 50€. Le problème est que si j’enlève un produit du panier pour simuler une commande à 40€ une alerte indique bien que le code promo a été désactivé mais le produit gratuit reste dans le panier jusqu’à la validation de la commande. Avez vous une solution ? Merci. Très bonne continuation. Mandes.

    Thomas Dufranne

    Bonjour Mendes, en effet le code que j’avais donné au départ dans l’article était incomplet. Il manquait une partie où le produit gratuit se retire automatiquement lorsque le coupon woocommerce n’est plus présent. Je viens de le mettre à jour l’article et les exemples de code, je vous invite à les tester, je pense qu’il résoudre votre problème. Thomas.

Repondre

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