Produits, catégories et panier WooCommerce

  • WordPress :4.9.9
  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 20)
  • Auteur
    Messages
  • #2292322
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Bonjour,

    Ma configuration WP actuelle

    Problème(s) rencontré(s) :

    Bonjour à tous et à toutes,

    Mon client me demande, pour sa boutique en ligne, d’interdire l’ajout au panier pour une catégorie de produit lorsqu’un produit d’une autre catégorie est ajouté au panier.

    Sur le site https://planetoffice.creer-application-paris.fr, il y a deux catégories / onglets qui se nomment “Drive” et “Shop”, les deux pages contiennent des produits qui ne possèdent pas la même méthode de livraison.

    Mon client souhaite alors ne pas mélangez ces deux catégories de produits dans le panier du visiteur.

    Pourriez-vous m’indiquer les solutions qui s’offrent à moi, comme une fonction PHP ou un plugin wordpress gratuit ou payant.

    Merci d’avance.

    #2292328
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Bonjour,

    Je viens de tester ce code et chez moi ça fonctionne. Remplacer la catégorie “paint” par l’une de vos deux catégories (deux endroits) et changez si vous le voulez le nom de la fonction et le texte du  message mais surtout, enlevez les commentaires: ils interfèrent et font apparaître du code sur la page.

    Et je ne vois pas le problème signalé  à la fin de l’article.

    • Cette réponse a été modifiée le il y a 2 semaines et 1 jour par ferman.
    #2292333
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Bonjour ferman, merci de votre réponse.

    J’ai réussi grâce au code que vous m’avez suggéré. En revanche, le message d’erreur ne s’affiche pas si l’on essaye d’ajouter au panier un produit de l’autre catégorie.

    Le produit ne s’ajoute pas, ce qui est parfait, mais aucun message ne s’affiche. Voila le code :

    function dont_add_drive_to_cart_containing_other($validation, $product_id) {
    
    
        $cart_has_drive = false;
    
    
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
    
            $product = $cart_item['data'];
    
            if (has_term('drive', 'product_cat', $product->id)) {
                $cart_has_drive = true;
    
                break;
            }
        }
    
        $product_is_drive = false;
        if (has_term('drive', 'product_cat', $product_id)) {
            $product_is_drive = true;
        }
    
    
        if (!WC()->cart->get_cart_contents_count() == 0) {
           
            if ($cart_has_drive && !$product_is_drive) {
                wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again', 'error');
                $validation = false;
            }
            
            elseif (!$cart_has_drive && $product_is_drive) {
                wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again', 'error');
                $validation = false;
            }
        }
    
        return $validation;
    }
    
    add_filter('woocommerce_add_to_cart_validation', 'dont_add_drive_to_cart_containing_other', 10, 2);

    #2292334
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Si, moi ça met  le message dans les deux cas (sur la page produit), que l’on mette d’abord un produit cat-1 -> “continuer les achats”  puis qu’on essaye de mettre un produit cat-2 ou l’inverse et j’ai utilisé votre code donc il n’y a pas d’erreur.

    • Cette réponse a été modifiée le il y a 2 semaines et 1 jour par ferman.
    #2292336
    Botaire
    Participant
    Initié WordPress
    11 contributions

    D’accord, je pense que mon thème n’affiche pas la zone ou le message doit apparaitre car rien n’est afficher sur mes pages produits quand je clique sur ajouter au panier.

    Merci de votre réponse, je vais simplement afficher une popup qui indiquera des informations pour le visiteur.

     

    #2292519
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Bonjour,

    D’accord, je pense que mon thème n’affiche pas la zone ou le message doit apparaitre

    Je ne pense pas que ce soit un problème de thème ou alors vous êtes vraiment tombé sur le mauvais. J’ai essayé avec trois thèmes : le mien, twenty fifteen et twenty nineteen sans problème, que les commandes soient faites depuis la page produit ou la boutique. Je ne crois d’ailleurs pas que les notices soient thème-dépendantes. C’est woocommerce qui gère ça. Avez-vous d’autres notices visibles du genre “produit ajouté au panier” ?

     

    #2293524
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Bonjour ferman,

     

    Non je n’ai aucune notice qui s’affiche lorsque j’ajoute simplement un produit au panier. Est-ce normal ?

    Pourriez-vous essayer sur cette page produit la : https://planetoffice.creer-application-paris.fr/shop/shop/assises-shop/fauteuil-vic/

    Le but est de ne pas pouvoir ajouté un produit de la catégorie “Drive” ainsi qu’un produit de la catégorie “Shop”.

    C’est le cas actuellement, mais le visiteur n’est pas au courant qu’il ne pas pas ajouté tel ou tel produit au panier..

    Sinon, est-ce possible d’ajouter un message directement après avoir appuyé sur le bouton “ajouter au panier ” ?

     

    Merci d’avance !

    #2293543
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Bonjour,

    Non, ça ne marche pas chez vous. Si on met le panier à zéro et qu’on ajoute l’article, il est bien ajouté. Quand on fait “voir le panier” on obtient le message en pièce jointe. Ce  n’est pas normal puisqu’on n’a pas essayé d’ajouter un deuxième article. Si on passe commande, c’est possible. Par contre il est  impossible d’ajouter un deuxième article .

    Edit: Enfin, je ne sais pas car apparemment vous avez enlevé le code  et je n’ai pas pu répéter les essais.

    Par contre, on ne voit pas de notice “ajouté au panier” une fois pressé le bouton “ajouter au panier” et sur la page panier, le bouton “continuer vers la boutique” ne ramène pas à la boutique. Pour moi ce n’est pas non plus normal. Je soupçonne un problème avec woocommerce (notices désactivées?) ou le code  mais pas le thème. Pour en avoir le coeur net, vous devriez essayer un autre thème, par exemple twenty nineteen puisque ça fonctionnait chez moi.

    Re-Edit: Non, pas votre code puisque je l’avais essayé.

    Ajouter un message après avoir pressé le bouton, c’est déjà exactement ce que ça doit faire avec le code. Donc rien à faire de ce côté là.

    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2293553
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Merci pour votre réponse,

    La popup à été enlevé par mes soins sachant que mon client veut absolument qu’un message s’affiche uniquement après avoir cliquer sur “ajouter au panier”.

    J’avais créé cette popup qui se déclenchait à l’ouverture de la page panier, drive et shop.

    Mais je ne trouve rien concernant le message (notice) qui ne s’affiche pas.

    #2293559
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Avez-vous essayé un autre thème?

    Essayez aussi de désactiver vos plugins sauf woocommerce; certains conflits empêchent les notices d’apparaître. Par exemple 1, 2, 3

    Mais je ne comprends pas bien le test qu’on a fait. Pour qu’il soit valable, il faudrait déjà mettre un produit “drive” dans le panier puis essayer de mettre un “shop”. C’est ce qu’on a fait? Pour répéter le test donnez moi un exemple de “drive” et “shop”.

    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    #2293561
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Non je n’ai pas essayé sur un autre thème mais je vous fait confiance sur le fait que cela fonctionne.

    J’ai essayé la démo de mon thème et une notice s’affiche bien au dessus du produit en indiquant qu’il a bien été ajouté au panier.

    Personnellement je n’ai rien qui s’affiche. Même pas un ajout au panier alors que je n’ai pas touché au code.

     

    #2293565
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Non je n’ai pas essayé sur un autre thème mais je vous fait confiance sur le fait que cela fonctionne.

    Heureusement que vous me faites confiance! mais justement si ce que je crois est vrai, ça ne devrait pas fonctionner chez vous quel que soit le thème utilisé. Pouvez vous essayer (pas avec une démo).

    Il y a  deux problèmes différents:

    1. Est-il possible d’ajouter des produits incompatibles (drive et shop) ou non?
    2. Les notices apparaissent-elles?

    Pour 2, on sait que non. Pour 1 ça fonctionne comme on s’y attend?

     

     

    #2293566
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Non l’ajout au panier de deux produits de catégories différentes n’est pas possible grâce au code que vous m’avez conseillé.

    Seules les notices ne s’affichent pas.

    Je vais demander au support de mon thème !

    #2293591
    ferman
    Participant
    Maître WordPress
    1737 contributions

    Dans votre code, essayez les modifs suivantes (le haut du code) et ajoutez en bas le filtre suivant (bas du code).

    Regardez si juste après avoir pressé “mettre au panier” le message apparaît sur la page produit (sans doute en haut de la page).

     

    if ($cart_has_paint && !$product_is_paint) {
                echo 'Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again';
                $validation = false;
            } // If cart contains a product that is not paint and product to be added is paint, display error message and return false.
            elseif (!$cart_has_paint && $product_is_paint) {
                echo 'Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again';
                $validation = false;
    
    
    
    add_filter( 'wc_add_to_cart_message_html', 'dont_add_paint_to_cart_containing_other' );

    Il n’aura aucun style mais si ça marche, il sera possible de modifier emplacement et style avec des CSS)

    Bien sûr remplacez par “drive” dans votre cas et aussi “dont_add_paint_to_cart_containing_other” par le nom de votre fonction.

     

    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    #2293599
    Botaire
    Participant
    Initié WordPress
    11 contributions

    Voici les modifications, qui ne fonctionnent toujours pas, peut être par une incompréhension de ma part :

     

    //*** Prevent mixture of paint and other prods in same cart ***//
    function dont_add_paint_to_cart_containing_other($validation, $product_id) {
    
    // Set flag false until we find a product in cat paint
        $cart_has_paint = false;
    
    // Set $cat_check true if a cart item is in paint cat
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
    
            $product = $cart_item['data'];
    
            if (has_term('drive', 'product_cat', $product->id)) {
                $cart_has_paint = true;
                // break because we only need one "true" to matter here
                break;
            }
        }
    
        $product_is_paint = false;
        if (has_term('drive', 'product_cat', $product_id)) {
            $product_is_paint = true;
        }
    
    // Return true if cart empty
        if (!WC()->cart->get_cart_contents_count() == 0) {
            // If cart contains paint and product to be added is not paint, display error message and return false.
            if ($cart_has_paint && !$product_is_paint) {
                echo 'Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again';
                $validation = false;
            } // If cart contains a product that is not paint and product to be added is paint, display error message and return false.
            elseif (!$cart_has_paint && $product_is_paint) {
                echo 'Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again';
                $validation = false;
            }
        }
        // Otherwise, return true.
        return $validation;
    }
    
    add_filter('woocommerce_add_to_cart_validation', 'dont_add_paint_to_cart_containing_other', 10, 2);
    add_filter( 'wc_add_to_cart_message_html', 'dont_add_paint_to_cart_containing_other' );

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