Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Guide sur la façon d’ajouter des frais personnalisés à WooCommerce Checkout par code

134

Dans certains cas, vous devrez peut-être ajouter des frais aux totaux du panier. Parfois seulement si une certaine condition est remplie, par exemple en fonction des totaux du panier ou du lieu d’expédition. Avec WooCommerce, ajouter des frais est assez facile – beaucoup plus facile que d’ajouter une remise en fait. Dans cet article, nous apprendrons comment ajouter des frais personnalisés à WooCommerce.

WooCommerce a une fonction intégrée dans l’objet panier pour ajouter des frais. Tout ce dont vous avez besoin est de vous accrocher à la bonne action et, avec l’objet panier fourni, d’appeler une fonction pour ajouter des frais. WooCommerce affichera automatiquement les frais dans le panier et les totaux de paiement. Vous décidez du libellé et du montant des frais.

Guide sur la façon d'ajouter des frais personnalisés à WooCommerce Checkout par code

Il est important de noter que le montant des frais ne peut pas être négatif, ce qui donne au client une remise. Ce "hack" fonctionnait auparavant dans les anciennes versions de WooCommerce, mais plus maintenant.

Entrons dans les détails du code! Le seul crochet dont vous devez vous préoccuper est woocommerce_cart_calculate_fees. À l’intérieur de ce crochet, vous pouvez obtenir l’objet cart en appelant WC()->cart. Avec cet objet, vous pouvez appeler add_fee()qui accepte quatre paramètres (vous n’avez probablement besoin que des deux premiers) ; add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string). Les deux premiers sont explicites. Le troisième paramètre est un booléen qui décide si les frais sont imposables ou non. Et le quatrième est de fournir une classe de taxe pour les frais (si le troisième paramètre est vrai). Mais il peut être laissé vide pour la classe de taxe standard.

Ajout d’un forfait

L’ajout de frais de douane se fait dans sa forme la plus simple comme ceci :

La première étape consiste à empêcher l’ajout de frais si nous sommes en admin ou si Ajax est en cours. Ensuite, nous appelons add_fee()l’objet cart. Cela ajoutera des frais nommés "Une petite taxe" d’une valeur de 5. La valeur sera dans la devise que vous avez dans votre magasin. Si la devise du magasin est définie sur dollars, elle devient 5 $. Ajustez le nom et le montant à vos besoins.

Ajouter des frais en pourcentage du total du panier

Si vous souhaitez que le montant des frais soit un pourcentage du total du panier, il vous suffit de le calculer différemment. N’oubliez pas que nous avons toujours accès à l’objet panier en appelant WC()->cartet à partir de là, nous pouvons récupérer les totaux.

Le code ci-dessus ajoutera des frais s’élevant à 5 % du total du panier, soit le total des articles du panier (get_cart_contents_total()) plus les frais d’expédition du panier (get_shipping_total()). Ajustez le taux et les totaux à inclure ou à exclure dans ce dont vous avez besoin.

C’est donc plutôt sympa, mais dans certains cas, nous voudrons peut-être personnaliser quand ajouter des frais. Peut-être souhaitez-vous ajouter des frais uniquement pour un certain mode d’expédition, un mode de paiement ou en fonction du total du panier. Le processus est le même, nous ajoutons simplement les frais uniquement si nos conditions sont remplies.

Ajout de frais en fonction des totaux du panier

Supposons que vous vouliez ajouter des frais uniquement si les totaux du panier étaient inférieurs à un certain montant. Supposons que vous souhaitiez ajouter des frais pour le traitement de petites quantités. Vous pourriez le faire comme ceci :

Utilisez WC()->cart->get_cart_contents_total()pour obtenir le numéro flottant du total du panier, hors frais de port. (Si vous souhaitez également inclure les frais d’expédition, regardez ci-dessus en ajoutant des frais en pourcentage pour savoir comment obtenir les totaux d’expédition). Ensuite, faites vos comparaisons.

Vous pouvez également le retourner et décider d’ajouter des frais si le panier dépassait une certaine limite.

Ajout de frais en fonction du lieu d’expédition

Vous pouvez également ajouter des frais en fonction du lieu d’expédition, par exemple par pays. De la même manière que pour obtenir un objet panier, nous pouvons utiliser WC()->customerpour l’objet client. Gardez à l’esprit que lorsque le client n’est pas connecté et n’est pas encore arrivé à la caisse et a renseigné son adresse, les valeurs de l’objet client seront vides ou les valeurs par défaut définies dans votre boutique.

Vous aurez besoin de connaître le code du pays – voici une belle référence de code de pays. Voici un exemple d’ajout de frais si le client vient de Norvège.

Ajout de frais en fonction du mode d’expédition choisi

Obtenir la méthode d’expédition est un peu plus délicat car cela dépend de la session de l’utilisateur et ne se présente pas dans un "format agréable et compréhensible". Vous pouvez obtenir la méthode d’expédition actuellement choisie avec WC()->session->get('chosen_shipping_methods'). Notez qu’il est écrit « méthodes » et non « méthode », cela renvoie donc un tableau. Normalement, le tableau contient un élément, où chaque élément se compose de chaînes d’ID d’expédition, de deux-points et d’un ID après celui-ci. Je recommande d’utiliser les méthodes de chaîne PHP pour vérifier si la chaîne contient l’ID – par exemple strpos()– et non s’il est égal.

Ajout de frais en fonction du mode de paiement choisi

Si vous souhaitez ajouter des frais en fonction de la passerelle de paiement choisie, vous pouvez obtenir la passerelle de paiement actuellement choisie avec WC()->session->get('chosen_payment_method')et faire une comparaison avec son nom (par exemple, pour Paypal, il reviendrait 'paypal'). Cependant, vous remarquerez peut-être que lorsque le client change de passerelle de paiement lors du paiement, les frais ne sont pas ajoutés ou supprimés dynamiquement. Vous devrez donc ajouter du Javascript supplémentaire pour vous assurer que WooCommerce met à jour le panier afin que vos frais fonctionnent de manière cohérente.

Pour ajouter le Javascript, nous nous accrochons à woocommerce_review_order_before_paymentce qui se produit juste avant la boîte de paiement lors du paiement et du script en ligne de sortie. Tout ce que le code fait, c’est déclencher le crochet de WooCommerce update_checkoutchaque fois que le choix du mode de paiement est modifié. Cela garantit que toutes les méthodes et crochets PHP nécessaires sont exécutés (y compris le crochet de frais) chaque fois que le panier est mis à jour.

Ajout de frais en fonction des produits dans le panier

Je l’ai déjà mentionné, mais je le répète: vous avez un accès complet à l’objet du panier avec WC()->cart, vous pouvez donc rechercher dans le contenu du panier un ID de produit spécifique et ajouter des frais s’il existe dans le panier.

L’utilisation WC()->cart->get_cart_contents()renvoie un tableau de tous les produits du panier. Vous pouvez soit parcourir cela avec une simple foreachboucle et vérifier chaque produit dans l’état souhaité, soit si vous souhaitez simplement vérifier les ID, vous pouvez extraire tous les ID de produit sur une seule ligne, comme suit :

L’exemple ci-dessous montre comment vous pouvez ajouter des frais selon que le panier contient un produit d’un certain ID :

Vous pouvez également utiliser des opérations similaires pour extraire des quantités si vous devez ajouter des frais lorsqu’un client ajoute une très grande quantité de quelque chose.

En conclusion

Cet article vous a montré comment ajouter des frais personnalisés et, à travers cinq exemples, comment ajouter des frais en fonction de certaines conditions. Ces conditions sont tout ce que j’ai rencontré et auquel je pouvais penser, et elles devraient au moins donner des indications sur la façon d’obtenir des informations pour personnaliser davantage vos conditions. Faites-moi savoir s’ils ont fonctionné pour vous, ou si vous avez trouvé une autre condition à laquelle je n’ai pas pensé !

Source d’enregistrement: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More