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

Comment ajouter par programmation une remise personnalisée à WooCommerce Checkout

23

Dans cet article, nous verrons comment nous ajoutons des remises par programme et automatiquement. Pour ce faire, nous utilisons la fonctionnalité de coupon de WooCommerce, mais nous la rendons automatique et nous cachons le fait qu’il s’agit d’un coupon pour les clients. J’ai essayé de garder le code aussi général que possible car les conditions d’application des remises peuvent varier considérablement pour quiconque lit ceci.

Pourquoi les coupons sont le moyen de le faire

Dans les anciennes versions de WooCommerce, nous avions quelques options ("hackish") pour ajouter des remises avec du code ; par exemple, fournir un nombre négatif à add_fee()ou travailler avec get_discounted_price(). Malheureusement, ces méthodes ne fonctionnent plus ou sont considérées comme héritées et seront supprimées dans les versions ultérieures. La bonne façon structurelle d’ajouter des remises consiste à utiliser la fonctionnalité de coupon intégrée dans WooCommerce.

Cependant, un coupon ne peut généralement pas être appliqué automatiquement à un panier. Il oblige le client à saisir manuellement un code de coupon qui lui a été attribué. Dans certaines boutiques en ligne, vous souhaitez simplement qu’une remise soit appliquée automatiquement lorsqu’une certaine condition est remplie sans que le client n’ait à faire quoi que ce soit. C’est ce que nous allons corriger en utilisant le code.

Remises personnalisées avec des coupons

Vous devrez créer un coupon avec un code et le configurer avec les paramètres que vous souhaitez. Vous pourrez l’appliquer, le supprimer et modifier différentes sorties partout où le coupon est visible pour le client. En option, si vous ne souhaitez pas que les coupons soient disponibles pour les clients de votre boutique en ligne, nous examinerons quelques astuces simples pour masquer les options de saisie manuelle des codes de coupon.

Dans l’exemple de code ci-dessous, je regroupe tout le code associé dans une classe PHP. Cela aide pour un code plus propre mais est particulièrement utile car nous voulons nous référer plusieurs fois au code du coupon. La définir comme une variable de classe est mieux que de la répéter dans plusieurs fonctions.

Créez votre réduction sous forme de coupon

La première étape consiste à créer le coupon qui sera le «placeholder» de votre réduction. Le plus simple est simplement d’en créer un dans l’administrateur WooCommerce (WooCommerce > Coupons > Ajouter un coupon).

Si vous souhaitez créer le coupon par programme, un coupon est en fait une publication avec laquelle vous pouvez créer wp_insert_post()– mais vous devez prendre soin de créer votre publication de coupon une seule fois. WooCommerce a un petit guide sur la façon de créer un coupon par programme.

Fournissez un slug unique comme code de coupon et configurez au minimum le montant de la remise (soit un pourcentage, soit des frais fixes). En ce qui concerne l’exemple de code ci-dessous, j’ai créé un code de coupon ‘ example‘ (je recommande cependant d’utiliser un nom plus créatif et plus approprié pour le vôtre).

Création de la classe PHP qui contiendra tout notre code

Passons enfin au codage! Vous pouvez définir cette classe directement dans le functions.phpcode de plugin de votre thème ou dans un fichier séparé inclus.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Nommez votre classe comme vous le souhaitez et remplacez la variable $coupon_codede classe par le nom que vous avez donné à votre coupon. N’oubliez pas d’initialiser la classe après à la fin (new AWPCustomDiscount()).

Si vous avez déjà programmé orienté objet, cela devrait vous être familier. Sinon, ne vous inquiétez pas, cela devrait être simple à suivre. Nous allons ajouter quelques fonctions à l’intérieur ici et faire référence au code de coupon avec $this->coupon_code. Commençons par le code responsable de l’ajout du coupon lorsque les conditions sont remplies.

Appliquer le coupon par programmation

Par expérience, j’ai appris que l’accrochage du code pour appliquer et supprimer des coupons fonctionne le mieux et le plus systématiquement en utilisant les deux crochets suivants; un pour le panier (woocommerce_before_cart) et un pour le paiement (woocommerce_before_checkout_form).

À l’intérieur de la fonction, tout ce que nous devons faire est de vérifier les conditions que nous voulons. WooCommerce offre des fonctions pour obtenir l’objet panier with WC()->cartque nous pouvons utiliser pour obtenir toutes les informations dont nous avons besoin sur le panier, telles que ses articles et ses totaux. Par exemple, le code ci-dessous appliquera une remise si le total du panier (hors remises) dépasse un certain montant.

Nous devons également nous assurer que si les conditions ne sont pas remplies, nous devons supprimer la remise si elle a été ajoutée précédemment. Dans notre exemple, imaginons que le client dépasse le montant maximum, mais qu’il se rende ensuite au panier, supprime certains articles et revienne ainsi en dessous du montant requis. Comme les coupons ne sont pas automatiquement appliqués, tous les coupons appliqués doivent également être supprimés par programme.

Utilisantapply_coupon

Les coupons sont ajoutés à l’objet panier en apply_coupon()fournissant le code de coupon comme paramètre, et ils sont supprimés de l’objet panier remove_coupon()avec le code de coupon comme paramètre. Assez simple. On peut aussi utiliser la fonction si bien nommée get_applied_coupons()dans l’objet panier pour vérifier si notre coupon a déjà été appliqué.

Si vous n’êtes pas familier avec l’utilisation de PHP orienté objet dans WordPress ; voici un bref résumé du fonctionnement de ce __construct()qui précède: La fonction s’exécute chaque fois que la classe est initialisée, ce que nous faisons immédiatement après la classe. À l’ intérieur __construct(), vous ajouterez généralement tous les crochets comme vous le feriez normalement, par exemple à l’intérieur functions.php. Pour que WordPress trouve nos fonctions dans notre classe, nous devons dire au hook de se référer à une fonction définie dans un tableau composé de $this(l’objet de la classe) et du nom de la fonction.

A l’intérieur de la fonction addDiscount()nous programmons dans nos conditions. Dans l’exemple ci-dessus, je récupère le total d’utilisation du panier WC()->cart->get_subtotal()et le compare à mes conditions – étant supérieur à 500.

Remarque: Si vous devez récupérer et comparer les totaux des paniers, sachez que la plupart des totaux sont des coupons inclus. Par exemple, les plus familiers WC()->cart->get_cart_contents_total()renverront le total avant l’expédition, mais les remises incluses ; ce qui signifie que si votre réduction a déjà été appliquée, ce total ne sera pas comparable.

Vous pouvez appeler apply_coupon()sans vérifier si le coupon a déjà été appliqué (la ifvérification à la ligne 14), car la fonction apply_coupon()s’assurera elle-même de ne pas le rajouter s’il a déjà été appliqué. Cependant, cette ifvérification empêche le client de recevoir un message d’erreur disant "Le coupon a déjà été appliqué" à chaque mise à jour du panier.

Voici comment votre remise apparaîtra dans les totaux du panier dans le panier et à la caisse :

Comment ajouter par programmation une remise personnalisée à WooCommerce Checkout

Vos conditions de réduction

Les conditions de votre coupon dépendent entièrement de vous et de vos besoins. J’ai mis en place quelques exemples de conditions pour ajouter des frais de douane dans un article précédent – par exemple en fonction du lieu d’expédition ou des produits dans le panier. Vous pouvez également comparer la date d’aujourd’hui si vous souhaitez accorder une remise spéciale pour Noël ou Halloween, ou accorder une remise basée sur les conditions du client connecté.

Si vous souhaitez plutôt appliquer le coupon en fonction des paramètres que vous avez définis sur le coupon lui-même – par exemple exclure ou inclure certains ID de produit, vous pouvez également le faire. Vous pouvez instancier un objet du coupon à partir du code du coupon, comme ceci :

Avec cet objet de coupon, vous avez accès à toutes les fonctions pour récupérer tous les paramètres que vous avez définis sur le coupon. Par exemple, obtenir les identifiants de produits qui doivent être inclus pour le coupon :

Reportez-vous à la documentation de la classe WC_Coupon pour voir comment vous pouvez obtenir ce dont vous avez besoin.

Corriger l’étiquette visible du coupon

Le coupon devrait maintenant être ajouté et supprimé lorsque votre panier remplit ou ne remplit pas les conditions définies dans addDiscount(). Cependant, dans le tableau des totaux, à la fois dans le panier et lors du paiement, la réduction est affichée sous la forme "Coupon : exemple" (ou quel que soit votre code de coupon). Ce n’est pas bon! Heureusement, il est facile de changer cette étiquette en utilisant le filtre woocommerce_cart_totals_coupon_label. Nous allons ajouter le filtre à notre __construct()et définir une fonction :

Avec le filtre, nous avons accès à l’objet coupon en tant que deuxième paramètre. Avec l’objet coupon, nous pouvons vérifier sa propriété, code, s’il correspond ou non à notre code de coupon personnalisé. Si c’est le cas, nous renvoyons l’étiquette que nous voulons. Ajustez la sortie de l’étiquette à ce que vous voulez. Sinon, nous renvoyons l’étiquette de coupon par défaut.

Supprimer l’option utilisateur pour supprimer la remise

Une autre chose que vous avez peut-être remarquée dans l’affichage de notre remise dans le panier et à la caisse est qu’elle a un lien "[Supprimer]" après son montant. C’est le comportement par défaut des coupons dans WooCommerce, mais pour notre cas, ce n’est pas souhaitable. À la fois parce que cela pourrait dérouter les clients et parce que notre code le réappliquerait après sa suppression.

WooCommerce fournit le filtre woocommerce_cart_totals_coupon_htmlpour la sortie du montant. Heureusement, WooCommerce fournit la sortie HTML uniquement du montant lui-même comme troisième paramètre de ce filtre. Nous pouvons simplement le retourner au lieu de nous assurer que notre remise est présentée correctement avec la devise et tout.

Facultatif : Masquer la fonctionnalité de coupon pour les clients

Les coupons doivent être activés dans WooCommerce pour que notre fonctionnalité de réduction fonctionne, mais sachez que cela ajoutera l’option pour les clients de saisir manuellement les codes de coupon dans le panier et à la caisse. Si vous ne voulez pas montrer que votre boutique en ligne dispose d’une fonctionnalité de coupon, et en particulier interdire aux clients de saisir manuellement les codes de coupon, vous pouvez également le faire.

Le retirer de la caisse

La suppression de la fonctionnalité de coupon de la caisse est facile et peut être effectuée dans notre classe. Nous supprimons simplement le crochet qui rend le coupon "boîte", comme ceci :

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Le retirer du panier

Supprimer la fonctionnalité de code de coupon dans le panier n’est malheureusement pas aussi simple que cela est codé en dur dans un modèle. Vous devrez remplacer le modèle de panier de WooCommerce pour supprimer la fonctionnalité de coupon. Copiez le fichier pluginswoocommercetemplatescartcart.phpdans your-themewoocommercecartcart.php.

Les fichiers de modèle de WooCommerce changent constamment, donc vous donner un numéro de ligne exact ne vous aiderait pas. Mais vous trouverez le code qui génère l’entrée et le bouton du coupon près du bas du fichier ; ressemble un peu à ça :

Ce que vous devez faire est de commenter la sortie liée au coupon. Je recommande d’ajouter un commentaire PHP /*juste avant le if-check et de le fermer */juste après la parenthèse fermante. Ainsi:

À ce stade, la fonctionnalité de coupon de votre boutique en ligne devrait être pratiquement masquée pour les clients ! Mais votre remise personnalisée devrait parfaitement fonctionner.

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