- WordPress :5.8
- Statut : résolu
- Ce sujet contient 23 réponses, 3 participants et a été mis à jour pour la dernière fois par
Mandes, le il y a 2 mois et 1 semaine.
-
AuteurMessages
-
17 janvier 2022 à 20 h 58 min #2393467
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 😉
18 janvier 2022 à 18 h 57 min #2393553Bonjour,
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;19 janvier 2022 à 20 h 01 min #2393679Bonsoir 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' );15 février 2023 à 15 h 40 min #2444758Bonjour,
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
17 février 2023 à 23 h 37 min #2445094Bonjour,
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.
20 février 2023 à 15 h 28 min #2445462Bonjour,
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
29 septembre 2023 à 17 h 12 min #2461394Bonjour,
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 😉
29 septembre 2023 à 23 h 46 min #2461408Bonjour, ç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.
30 septembre 2023 à 9 h 49 min #2461427Bonjour 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 🙂
-
Cette réponse a été modifiée le il y a 2 mois et 1 semaine par
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.