[Résolu] Ajout automatique d’un produit gratuit au panier (sans code promo) (Créer un compte)

  • WordPress :5.8
  • Statut : résolu
9 sujets de 16 à 24 (sur un total de 24)
  • Auteur
    Messages
  • #2393467
    Mandes
    Participant
    Chevalier WordPress
    144 contributions

    Bonsoir,

    Je me demandais ce qu’il fallait que je modifie pour que le produit gratuit s’ajoute lorsque le sous-total (et non pas le total qui inclut les frais de port) atteint le minimum d’achat. Dois je remplacer « total » par « subtotal » partout dans le code ? Je ne sais pas si c’est correct. Merci pour vos conseils 😉

    #2393553
    ferman
    Participant
    Maître WordPress
    6517 contributions

    Bonjour,

    Dois je remplacer « total » par « subtotal » partout dans le code ?

    Oui, tout simplement. Vous avez trois lignes à modifier (+ une autre qui ne gêne pas mais qui est superflue):

    $subtotal = WC()->cart->subtotal;

    if ( ! $found && $subtotal >= $cart_total )

    elseif ($found && $subtotal < $cart_total )

    //en plus enlever la ligne ci-dessous, inutile.

    global $woocommerce;

    #2393679
    Mandes
    Participant
    Chevalier WordPress
    144 contributions

    Bonsoir Ferman et merci beaucoup pour cette nouvelle réponse que je découvre à l’instant.

    Ce qui nous donne donc au final (je place le global ci-après pour celles et ceux intéressés par ce code génial) :

    function ferman_add_product_to_cart() {

    $cart_total = 50;
    $free_product = wc_get_product( 22559 );
    $subtotal = WC()->cart->subtotal;
    $free_product_id = $free_product->get_ID(); // Product Id of the free product which will get added to cart
    $free_product_price = $free_product->get_regular_price($free_product_id);
    $free_product_reduced_price = $free_product->get_sale_price($free_product_id);
    $found = false;

    //check if product already in cart
    if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
    $product = $values['data'];
    if ( $product->get_id() == $free_product_id )
    $found = true;
    }
    // if product not found, add it
    if ( ! $found && $subtotal >= $cart_total ){

    WC()->cart->add_to_cart( $free_product_id );
    }
    elseif ($found && $subtotal < $cart_total ){
    $product_cart_id = WC()->cart->generate_cart_id( $free_product_id );
    $cart_item_key = WC()->cart->find_product_in_cart( $product_cart_id );
    if ( $cart_item_key ) {WC()->cart->remove_cart_item( $cart_item_key );}
    else {return;}
    }
    }
    else {
    return;
    }
    }

    add_action( 'template_redirect', 'ferman_add_product_to_cart' );


    function bbloomer_find_product_in_cart_modif() {

    $free_product = wc_get_product( 22559 );
    $free_product_id = $free_product->get_ID();
    $free_product_price = $free_product->get_regular_price($free_product_id);
    $free_product_name = $free_product->get_name($free_product_id);
    $in_cart = false;

    foreach( WC()->cart->get_cart() as $cart_item ) {
    $product_in_cart = $cart_item['product_id'];
    if ( $product_in_cart === $free_product_id ) $in_cart = true;
    }
    if ( $in_cart ) {
    $notice = 'Pour cette commande nous vous offrons ce produit : '. $free_product_name.' Valeur : '.$free_product_price.' euros.';
    wc_print_notice( $notice, 'notice' );
    }
    }
    add_action( 'woocommerce_before_cart', 'bbloomer_find_product_in_cart_modif' );

    #2444758
    isag
    Participant
    Initié WordPress
    2 contributions

    Bonjour,

    Ce module est super et fonctionne parfaitement sur le montant global de commande (frais de port y compris).

    Par contre, Y aurait il un moyen de faire l’ajout de produit sur le total panier « subtotal? » (et non sur le total général de commande). Je ne trouve pas la variable à changer.

    Merci de votre aide

    Cdt

    #2445094
    ferman
    Participant
    Maître WordPress
    6517 contributions

    Bonjour,

    En fait ça fonctionne en prenant en compte le sous-total (panier hors frais d’envoi). J’avais un peu oublié depuis plus d’un an mais je viens de vérifier.

     

    #2445462
    isag
    Participant
    Initié WordPress
    2 contributions

    Bonjour,

    Merci d’avoir pris le temps de me répondre.
    Je viens de me rendre compte de mon erreur et effectivement ça marche correctement.

    Encore merci de ce beau module bien utile.

    Cordialement

    #2461394
    Mandes
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour,

    Je reviens en 2023 car la « notice » donnant le produit offert et le montant économisé n’apparait plus sur la page panier. Y aurait’il quelque chose à modifier dans le code ? Merci et très belle fin de jounrée à tous 😉

    #2461408
    ferman
    Participant
    Maître WordPress
    6517 contributions

    Bonjour, ça va être difficile parce-que  pour moi le code fonctionne comme avant (wordpress 6.3.1, woocommerce 8.1.1, php 8.0.13). Il faudrait donc trouver ce qui différencie les deux sites. Essayez de vous souvenir depuis quand le problème est apparu et si ça coïncide avec l’installation d’un nouveau plugin. Vous avez par exemple un plugin yith avec le message: « En confirmant cet achat vous cumulerez automatiquement 6 points fidélité avant le panier ». Essayez peut-être en remplaçant dans la fonction « bbloomer_find_product_in_cart_modif » le hook « woocommerce_before_cart ». Le message devrait alors apparaître après le panier. Si ça fonctionne on pourra voir s’il est possible de le remonter plus haut.

    Si ça ne fonctionne pas, à part désactiver les extensions récemment installées (celles se rapportant à woocommerce) pour trouver un conflit éventuel, je ne vois pas trop quoi faire.

    'woocommerce_before_cart'

    //remplacer par:

    'woocommerce_after_cart'

    • Cette réponse a été modifiée le il y a 2 mois et 1 semaine par ferman.
    #2461427
    Mandes
    Participant
    Chevalier WordPress
    144 contributions

    Bonjour Ferman et merci pour ce retour.

    Ca ne fonctionne pas.

    Le produit offert s’ajoute correctement et c’est le plus important.

    Seule la notice est manquante. Rien de dramatique 😉

    Je vais essayer de voir si ce n’est pas une extension qui gache ce chouette code.

    Merci encore et très bon dimanche 🙂

     

9 sujets de 16 à 24 (sur un total de 24)
  • Vous devez être connecté pour répondre à ce sujet.