[Résolu] Paramètre « Vendre individuellement » ne fonctionne pas (Créer un compte)

  • WordPress :6.4
  • Statut : résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #2470155
    GBteam
    Participant
    Initié WordPress
    3 contributions

    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

    #2470188
    Joss47
    Modérateur
    Maître WordPress
    5128 contributions

    Salut,

    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;

    }

    #2470291
    GBteam
    Participant
    Initié WordPress
    3 contributions

    @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

    #2470295
    Joss47
    Modérateur
    Maître WordPress
    5128 contributions

    Salut,

    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;
    }

    #2470299
    GBteam
    Participant
    Initié WordPress
    3 contributions

    Merci 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

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