Je suis confronté à des difficultés avec le processus de paiement dans WooCommerce.
J'utilise le plugin "B2B for WooCommerce" pour différencier les produits classiques des produits B2B. La scène est la suivante :
1 - Un visiteur non enregistré ajoute un produit de la catégorie "Général" (disponible par défaut aux visiteurs non enregistrés) à son panier.
2 - Sur la page de paiement, le visiteur décide de s'inscrire en tant que client B2B (via les champs de sélection du formulaire sur la page de paiement).
3 - Les processus d'inscription et de paiement se déroulent simultanément sur cette page.
Je souhaite empêcher qu'une commande soit passée si l'utilisateur s'inscrit en tant que client B2B et a un produit "normal" dans le panier. Étant donné que ces deux actions (inscription et paiement) se produisent en même temps, les hooks WooCommerce typiques ne fonctionnent pas comme prévu.
Comment vérifier le rôle de l'utilisateur et le contenu du panier enregistré lors du processus de paiement et bloquer la commande lorsque les conditions sont remplies ? Ou peut-être existe-t-il un moyen meilleur et plus simple de procéder ?
J'ai essayé la fonctionnalité de réinitialisation du panier et de rechargement de la page.
Éditeur :
Rôle utilisateur : Wwp_wholesaler
J'ai créé deux catégories de produits WooCommerce : Général et Gros. "Normal" est visible par tous les visiteurs. Après avoir enregistré le rôle, « Wwp_wholesaler » pourra voir « grossiste ».
L'attribut name du champ de sélection est : "afreg_select_user_role". Les attributs de valeur des options sont « client » (pour les clients réguliers) et « wwp_wholesaler » (pour les grossistes).
Le code suivant arrêtera le processus de paiement plus tôt lorsqu'il détectera qu'un client B2B a un article régulier dans son panier. Dans ce cas, les articles habituels sont supprimés du panier et un message d'erreur est généré, empêchant la commande d'être passée.
Remarque : L'alias du rôle utilisateur fourni est erroné car l'alias du rôle utilisateur n'est pas en majuscule.
Code :
Le code est dans le fichier function.php du thème enfant (ou dans le plugin). Testé et fonctionnel.