- WordPress :6.4
- Statut : résolu
- Ce sujet contient 4 réponses, 2 participants et a été mis à jour pour la dernière fois par
GBteam, le il y a 10 mois et 2 semaines.
-
AuteurMessages
-
26 mars 2024 à 16 h 06 min #2470155
Bonjour,
je n’arrive pas à faire fonctionner le paramètre « Vendre individuellement » d’un produit WooCommerce comme je le voudrais. Nous sommes d’accord, ce paramètre doit empêcher qu’un produit ne soit ajouté 2 fois au panier par un même utilisateur ?
Or cela ne fonctionne pas dans plusieurs cas :
– si j’utilise un produit variable, je peux ajouter produit plusieurs fois tant que l’attribut est différent.
– si j’utilise un produit simple mais que je lui ai ajouté des champs personnalisés (à l’aide du plugin Advanced Product Fields for WooCommerce).
Mon besoin est d’imposer au client de ne commander qu’un seul produit à la fois… Comment puis-je faire ?
Merci d’avance pour vos conseils
26 mars 2024 à 22 h 11 min #2470188Salut,
Nous sommes d’accord, ce paramètre doit empêcher qu’un produit ne soit ajouté 2 fois au panier par un même utilisateur ?
Tout à fait !
Pour les variations tu peux utiliser cela :
add_filter('woocommerce_add_to_cart_validation', 'limiter_un_seul_produit_dans_le_panier', 10, 3);
function limiter_un_seul_produit_dans_le_panier($passed, $product_id, $quantity) {
if (WC()->cart->get_cart_contents_count() >= 1) {
// Empêche l'ajout de nouveaux produits si le panier contient déjà un article.
wc_add_notice(__('Désolé, vous ne pouvez commander qu\'un seul produit à la fois.', 'woocommerce'), 'error');
return false;
}
return $passed;
}
add_action('woocommerce_before_calculate_totals', 'verifier_les_variations_dans_le_panier');
function verifier_les_variations_dans_le_panier($cart) {
if (is_admin() && !defined('DOING_AJAX')) return;
if (did_action('woocommerce_before_calculate_totals') >= 2) return;
}28 mars 2024 à 12 h 06 min #2470291@Joss47 merci beaucoup pour avoir prit le temps de me fournir ce code. Petit problème cependant, ce code empêche d’ajouter 2 produits différents dans le panier. Mon souhait serait de pouvoir ajouter autant de produit que je souhaite dans le panier, sauf pour ceux qui ont la case « Vendre individuellement » cochée. C’est là que j’ai besoin de détecter si le panier contient déjà une variante de ce produit.
Suis-je clair ?
Si tu peux optimiser ton code dans ce but ça serait magnifique.
Merci encore
28 mars 2024 à 12 h 35 min #2470295Salut,
Ah mince.
Tente avec ce code modifié alors :add_filter('woocommerce_add_to_cart_validation', 'limiter_un_seul_produit_dans_le_panier_si_vendu_individuellement', 10, 3);
function limiter_un_seul_produit_dans_le_panier_si_vendu_individuellement($passed, $product_id, $quantity) {
$product = wc_get_product($product_id);
// Vérifie si le produit est configuré pour être vendu individuellement.
if ($product->get_sold_individually()) {
if (WC()->cart->get_cart_contents_count() >= 1) {
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
// Vérifie si le produit actuel est différent du produit dans le panier.
if ($cart_item['product_id'] != $product_id) {
// Empêche l'ajout de nouveaux produits si le panier contient déjà un produit vendu individuellement.
wc_add_notice(__('Désolé, vous ne pouvez commander qu\'un seul produit à la fois lorsque le produit est vendu individuellement.', 'woocommerce'), 'error');
return false;
}
}
}
}
return $passed;
}28 mars 2024 à 15 h 23 min #2470299Merci infiniment, cela fonctionne ! Petit détail cependant, j’ai « corrigé » un petit détail :
if ($cart_item['product_id'] != $product_id) {
J’ai changé le != en ==, car ça faisait l’inverse de ce que je voulais.
Merci encore
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.