{"id":234232,"date":"2023-02-17T09:51:00","date_gmt":"2023-02-17T06:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234232"},"modified":"2022-11-12T01:21:23","modified_gmt":"2022-11-11T22:21:23","slug":"comment-ajouter-par-programmation-une-remise-personnalisee-a-woocommerce-checkout","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-ajouter-par-programmation-une-remise-personnalisee-a-woocommerce-checkout\/","title":{"rendered":"Comment ajouter par programmation une remise personnalis\u00e9e \u00e0 WooCommerce Checkout"},"content":{"rendered":"\n<p>Dans cet article, nous verrons comment nous ajoutons des remises par programme et automatiquement. Pour ce faire, nous utilisons la fonctionnalit\u00e9 de coupon de WooCommerce, mais nous la rendons automatique et nous cachons le fait qu&rsquo;il s&rsquo;agit d&rsquo;un coupon pour les clients. J&rsquo;ai essay\u00e9 de garder le code aussi g\u00e9n\u00e9ral que possible car les conditions d&rsquo;application des remises peuvent varier consid\u00e9rablement pour quiconque lit ceci.<\/p>\n<h2>Pourquoi les coupons sont le moyen de le faire<\/h2>\n<p>Dans les anciennes versions de WooCommerce, nous avions quelques options (&quot;hackish&quot;) pour ajouter des remises avec du code\u00a0; par exemple, fournir un nombre n\u00e9gatif \u00e0 <code>add_fee()<\/code>ou travailler avec <code>get_discounted_price()<\/code>. Malheureusement, ces m\u00e9thodes ne fonctionnent plus ou sont consid\u00e9r\u00e9es comme h\u00e9rit\u00e9es et seront supprim\u00e9es dans les versions ult\u00e9rieures. La bonne fa\u00e7on structurelle d&rsquo;ajouter des remises consiste \u00e0 utiliser la fonctionnalit\u00e9 de coupon int\u00e9gr\u00e9e dans WooCommerce.<\/p>\n<p>Cependant, un coupon ne peut g\u00e9n\u00e9ralement pas \u00eatre appliqu\u00e9 automatiquement \u00e0 un panier. Il oblige le client \u00e0 saisir manuellement un code de coupon qui lui a \u00e9t\u00e9 attribu\u00e9. Dans certaines boutiques en ligne, vous souhaitez simplement qu&rsquo;une remise soit appliqu\u00e9e automatiquement lorsqu&rsquo;une certaine condition est remplie sans que le client n&rsquo;ait \u00e0 faire quoi que ce soit. C&rsquo;est ce que nous allons corriger en utilisant le code.<\/p>\n<h2>Remises personnalis\u00e9es avec des coupons<\/h2>\n<p>Vous devrez cr\u00e9er un coupon avec un code et le configurer avec les param\u00e8tres que vous souhaitez. Vous pourrez l&rsquo;appliquer, le supprimer et modifier diff\u00e9rentes sorties partout o\u00f9 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.<\/p>\n<p>Dans l&rsquo;exemple de code ci-dessous, je regroupe tout le code associ\u00e9 dans une classe PHP. Cela aide pour un code plus propre mais est particuli\u00e8rement utile car nous voulons nous r\u00e9f\u00e9rer plusieurs fois au code du coupon. La d\u00e9finir comme une variable de classe est mieux que de la r\u00e9p\u00e9ter dans plusieurs fonctions.<\/p>\n<h3>Cr\u00e9ez votre r\u00e9duction sous forme de coupon<\/h3>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 cr\u00e9er le coupon qui sera le \u00abplaceholder\u00bb de votre r\u00e9duction. Le plus simple est simplement d&rsquo;en cr\u00e9er un dans l&rsquo;administrateur WooCommerce (WooCommerce &gt; Coupons &gt; Ajouter un coupon).<\/p>\n<p>Si vous souhaitez cr\u00e9er le coupon par programme, un coupon est en fait une publication avec laquelle vous pouvez cr\u00e9er <code>wp_insert_post()<\/code>&#8211; mais vous devez prendre soin de cr\u00e9er votre publication de coupon une seule fois. WooCommerce a un petit <a href=\"https:\/\/docs.woocommerce.com\/document\/create-a-coupon-programatically\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">guide sur la fa\u00e7on de cr\u00e9er un coupon par programme<\/a>.<\/p>\n<p>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&rsquo;exemple de code ci-dessous, j&rsquo;ai cr\u00e9\u00e9 un code de coupon &lsquo; <code>example<\/code>&lsquo; (je recommande cependant d&rsquo;utiliser un nom plus cr\u00e9atif et plus appropri\u00e9 pour le v\u00f4tre).<\/p>\n<h3>Cr\u00e9ation de la classe PHP qui contiendra tout notre code<\/h3>\n<p>Passons enfin au codage! Vous pouvez d\u00e9finir cette classe directement dans le <code>functions.php<\/code>code de plugin de votre th\u00e8me ou dans un fichier s\u00e9par\u00e9 inclus.<\/p>\n<pre><code>class AWPCustomDiscount {\n    private $coupon_code = 'example';\n\u00a0\n    public function __construct() {\n\u00a0\n    }\n}\nnew AWPCustomDiscount();<\/code><\/pre>\n<p>Nommez votre classe comme vous le souhaitez et remplacez la variable <code>$coupon_code<\/code>de classe par le nom que vous avez donn\u00e9 \u00e0 votre coupon. N&rsquo;oubliez pas d&rsquo;initialiser la classe apr\u00e8s \u00e0 la fin (<code>new AWPCustomDiscount()<\/code>).<\/p>\n<p>Si vous avez d\u00e9j\u00e0 programm\u00e9 orient\u00e9 objet, cela devrait vous \u00eatre familier. Sinon, ne vous inqui\u00e9tez pas, cela devrait \u00eatre simple \u00e0 suivre. Nous allons ajouter quelques fonctions \u00e0 l&rsquo;int\u00e9rieur ici et faire r\u00e9f\u00e9rence au code de coupon avec <code>$this-&gt;coupon_code<\/code>. Commen\u00e7ons par le code responsable de l&rsquo;ajout du coupon lorsque les conditions sont remplies.<\/p>\n<h3>Appliquer le coupon par programmation<\/h3>\n<p>Par exp\u00e9rience, j&rsquo;ai appris que l&rsquo;accrochage du code pour appliquer et supprimer des coupons fonctionne le mieux et le plus syst\u00e9matiquement en utilisant les deux crochets suivants; un pour le panier (<code>woocommerce_before_cart<\/code>) et un pour le paiement (<code>woocommerce_before_checkout_form<\/code>).<\/p>\n<p>\u00c0 l&rsquo;int\u00e9rieur de la fonction, tout ce que nous devons faire est de v\u00e9rifier les conditions que nous voulons. WooCommerce offre des fonctions pour obtenir l&rsquo;objet panier <code>with WC()-&gt;cart<\/code>que 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\u00e9passe un certain montant.<\/p>\n<p>Nous devons \u00e9galement nous assurer que si les conditions ne sont pas remplies, nous devons supprimer la remise si elle a \u00e9t\u00e9 ajout\u00e9e pr\u00e9c\u00e9demment. Dans notre exemple, imaginons que le client d\u00e9passe le montant maximum, mais qu&rsquo;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\u00e9s, tous les coupons appliqu\u00e9s doivent \u00e9galement \u00eatre supprim\u00e9s par programme.<\/p>\n<h4>Utilisant<code>apply_coupon<\/code><\/h4>\n<p>Les coupons sont ajout\u00e9s \u00e0 l&rsquo;objet panier en <code>apply_coupon()<\/code>fournissant le code de coupon comme param\u00e8tre, et ils sont supprim\u00e9s de l&rsquo;objet panier <code>remove_coupon()<\/code>avec le code de coupon comme param\u00e8tre. Assez simple. On peut aussi utiliser la fonction si bien nomm\u00e9e <code>get_applied_coupons()<\/code>dans l&rsquo;objet panier pour v\u00e9rifier si notre coupon a d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9.<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n    }\n\u00a0\n    function addDiscount() {\n        if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n            return;\n        }\n        if (WC()-&gt;cart-&gt;get_subtotal() &gt; 500) {\n            \/\/ add discount, if not added already\n            if (!in_array($this-&gt;coupon_code, WC()-&gt;cart-&gt;get_applied_coupons())) {\n                WC()-&gt;cart-&gt;apply_coupon($this-&gt;coupon_code);\n            }\n        } else {\n            \/\/ remove discount if it was previously added\n            WC()-&gt;cart-&gt;remove_coupon($this-&gt;coupon_code);\n        }\n    }\n    ...<\/code><\/pre>\n<p>Si vous n&rsquo;\u00eates pas familier avec l&rsquo;utilisation de PHP orient\u00e9 objet dans WordPress ; voici un bref r\u00e9sum\u00e9 du fonctionnement de ce <code>__construct()<\/code>qui pr\u00e9c\u00e8de: La fonction s&rsquo;ex\u00e9cute chaque fois que la classe est initialis\u00e9e, ce que nous faisons imm\u00e9diatement apr\u00e8s la classe. \u00c0 l&rsquo; int\u00e9rieur <code>__construct()<\/code>, vous ajouterez g\u00e9n\u00e9ralement tous les crochets comme vous le feriez normalement, par exemple \u00e0 l&rsquo;int\u00e9rieur <code>functions.php<\/code>. Pour que WordPress trouve nos fonctions dans notre classe, nous devons dire au hook de se r\u00e9f\u00e9rer \u00e0 une fonction d\u00e9finie dans un tableau compos\u00e9 de <code>$this<\/code>(l&rsquo;objet de la classe) et du nom de la fonction.<\/p>\n<p>A l&rsquo;int\u00e9rieur de la fonction <code>addDiscount()<\/code>nous programmons dans nos conditions. Dans l&rsquo;exemple ci-dessus, je r\u00e9cup\u00e8re le total d&rsquo;utilisation du panier <code>WC()-&gt;cart-&gt;get_subtotal()<\/code>et le compare \u00e0 mes conditions &#8211; \u00e9tant sup\u00e9rieur \u00e0 500.<\/p>\n<p>Remarque: Si vous devez r\u00e9cup\u00e9rer et comparer les totaux des paniers, sachez que la plupart des totaux sont des coupons inclus. Par exemple, les plus familiers <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>renverront le total avant l&rsquo;exp\u00e9dition, mais les remises incluses\u00a0; ce qui signifie que si votre r\u00e9duction a d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9e, ce total ne sera pas comparable.<\/p>\n<p>Vous pouvez appeler <code>apply_coupon()<\/code>sans v\u00e9rifier si le coupon a d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9 (la <code>if<\/code>v\u00e9rification \u00e0 la ligne 14), car la fonction <code>apply_coupon()<\/code>s&rsquo;assurera elle-m\u00eame de ne pas le rajouter s&rsquo;il a d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9. Cependant, cette <code>if<\/code>v\u00e9rification emp\u00eache le client de recevoir un message d&rsquo;erreur disant &quot;Le coupon a d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9&quot; \u00e0 chaque mise \u00e0 jour du panier.<\/p>\n<p>Voici comment votre remise appara\u00eetra dans les totaux du panier dans le panier et \u00e0 la caisse\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152866-61e4fcd750a7d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152866-61e4fcd750a7d.png\" alt=\"Comment ajouter par programmation une remise personnalis\u00e9e \u00e0 WooCommerce Checkout\" ><\/a><\/p>\n<h4>Vos conditions de r\u00e9duction<\/h4>\n<p>Les conditions de votre coupon d\u00e9pendent enti\u00e8rement de vous et de vos besoins. J&rsquo;ai mis en place quelques exemples de conditions pour <a href=\"https:\/\/awhitepixel.com\/blog\/guide-on-how-to-add-custom-fees-to-woocommerce-checkout\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ajouter des frais de douane dans un article pr\u00e9c\u00e9dent<\/a> &#8211; par exemple en fonction du lieu d&rsquo;exp\u00e9dition ou des produits dans le panier. Vous pouvez \u00e9galement comparer la date d&rsquo;aujourd&rsquo;hui si vous souhaitez accorder une remise sp\u00e9ciale pour No\u00ebl ou Halloween, ou accorder une remise bas\u00e9e sur les conditions du client connect\u00e9.<\/p>\n<p>Si vous souhaitez plut\u00f4t appliquer le coupon en fonction des param\u00e8tres que vous avez d\u00e9finis sur le coupon lui-m\u00eame &#8211; par exemple exclure ou inclure certains ID de produit, vous pouvez \u00e9galement le faire. Vous pouvez instancier un objet du coupon \u00e0 partir du code du coupon, comme ceci\u00a0:<\/p>\n<pre><code>$coupon = new WC_Coupon($this-&gt;coupon_code);<\/code><\/pre>\n<p>Avec cet objet de coupon, vous avez acc\u00e8s \u00e0 toutes les fonctions pour r\u00e9cup\u00e9rer tous les param\u00e8tres que vous avez d\u00e9finis sur le coupon. Par exemple, obtenir les identifiants de produits qui doivent \u00eatre inclus pour le coupon\u00a0:<\/p>\n<pre><code>$required_products = $coupon-&gt;get_product_ids();<\/code><\/pre>\n<p>Reportez-vous \u00e0 la <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/class-WC_Coupon.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentation de la classe WC_Coupon<\/a> pour voir comment vous pouvez obtenir ce dont vous avez besoin.<\/p>\n<h3>Corriger l&rsquo;\u00e9tiquette visible du coupon<\/h3>\n<p>Le coupon devrait maintenant \u00eatre ajout\u00e9 et supprim\u00e9 lorsque votre panier remplit ou ne remplit pas les conditions d\u00e9finies dans <code>addDiscount()<\/code>. Cependant, dans le tableau des totaux, \u00e0 la fois dans le panier et lors du paiement, la r\u00e9duction est affich\u00e9e sous la forme &quot;Coupon\u00a0: exemple&quot; (ou quel que soit votre code de coupon). Ce n&rsquo;est pas bon! Heureusement, il est facile de changer cette \u00e9tiquette en utilisant le filtre <code>woocommerce_cart_totals_coupon_label<\/code>. Nous allons ajouter le filtre \u00e0 notre <code>__construct()<\/code>et d\u00e9finir une fonction\u00a0:<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n    }\n\u00a0\n    function discountLabel($label, $coupon) {\n        if ($coupon-&gt;code == $this-&gt;coupon_code) {\n            return __('Custom discount', 'txtdomain');\n        }\n        return $label;\n    }\n    ...<\/code><\/pre>\n<p>Avec le filtre, nous avons acc\u00e8s \u00e0 l&rsquo;objet coupon en tant que deuxi\u00e8me param\u00e8tre. Avec l&rsquo;objet coupon, nous pouvons v\u00e9rifier sa propri\u00e9t\u00e9, <code>code<\/code>, s&rsquo;il correspond ou non \u00e0 notre code de coupon personnalis\u00e9. Si c&rsquo;est le cas, nous renvoyons l&rsquo;\u00e9tiquette que nous voulons. Ajustez la sortie de l&rsquo;\u00e9tiquette \u00e0 ce que vous voulez. Sinon, nous renvoyons l&rsquo;\u00e9tiquette de coupon par d\u00e9faut.<\/p>\n<h3>Supprimer l&rsquo;option utilisateur pour supprimer la remise<\/h3>\n<p>Une autre chose que vous avez peut-\u00eatre remarqu\u00e9e dans l&rsquo;affichage de notre remise dans le panier et \u00e0 la caisse est qu&rsquo;elle a un lien &quot;[Supprimer]&quot; apr\u00e8s son montant. C&rsquo;est le comportement par d\u00e9faut des coupons dans WooCommerce, mais pour notre cas, ce n&rsquo;est pas souhaitable. \u00c0 la fois parce que cela pourrait d\u00e9router les clients et parce que notre code le r\u00e9appliquerait apr\u00e8s sa suppression.<\/p>\n<p>WooCommerce fournit le filtre <code>woocommerce_cart_totals_coupon_html<\/code>pour la sortie du montant. Heureusement, WooCommerce fournit la sortie HTML uniquement du montant lui-m\u00eame comme troisi\u00e8me param\u00e8tre de ce filtre. Nous pouvons simplement le retourner au lieu de nous assurer que notre remise est pr\u00e9sent\u00e9e correctement avec la devise et tout.<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n        add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3);\n    }\n\u00a0\n    function discountHtml($coupon_html, $coupon, $discount_amount_html) {\n        if ($coupon-&gt;code == $this-&gt;coupon_code) {\n            return $discount_amount_html;\n        }\n        return $coupon_html;\n    }\n    ...<\/code><\/pre>\n<h3>Facultatif\u00a0: Masquer la fonctionnalit\u00e9 de coupon pour les clients<\/h3>\n<p>Les coupons doivent \u00eatre activ\u00e9s dans WooCommerce pour que notre fonctionnalit\u00e9 de r\u00e9duction fonctionne, mais sachez que cela ajoutera l&rsquo;option pour les clients de saisir manuellement les codes de coupon dans le panier et \u00e0 la caisse. Si vous ne voulez pas montrer que votre boutique en ligne dispose d&rsquo;une fonctionnalit\u00e9 de coupon, et en particulier interdire aux clients de saisir manuellement les codes de coupon, vous pouvez \u00e9galement le faire.<\/p>\n<h4>Le retirer de la caisse<\/h4>\n<p>La suppression de la fonctionnalit\u00e9 de coupon de la caisse est facile et peut \u00eatre effectu\u00e9e dans notre classe. Nous supprimons simplement le crochet qui rend le coupon &quot;bo\u00eete&quot;, comme ceci\u00a0:<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n        add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3);\n        remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10);\n    }\n    ...<\/code><\/pre>\n<h4>Le retirer du panier<\/h4>\n<p>Supprimer la fonctionnalit\u00e9 de code de coupon dans le panier n&rsquo;est malheureusement pas aussi simple que cela est cod\u00e9 en dur dans un mod\u00e8le. Vous devrez remplacer le mod\u00e8le de panier de WooCommerce pour supprimer la fonctionnalit\u00e9 de coupon. Copiez le fichier <code>pluginswoocommercetemplatescartcart.php<\/code>dans <code>your-themewoocommercecartcart.php<\/code>.<\/p>\n<p>Les fichiers de mod\u00e8le de WooCommerce changent constamment, donc vous donner un num\u00e9ro de ligne exact ne vous aiderait pas. Mais vous trouverez le code qui g\u00e9n\u00e8re l&rsquo;entr\u00e9e et le bouton du coupon pr\u00e8s du bas du fichier\u00a0; ressemble un peu \u00e0 \u00e7a :<\/p>\n<pre><code>...\n&lt;?php if (wc_coupons_enabled()) { ?&gt;\n    &lt;div class=\"coupon\"&gt;\n        &lt;label for=\"coupon_code\"&gt;&lt;?php esc_html_e( 'Coupon:', 'woocommerce' ); ?&gt;&lt;\/label&gt; &lt;input type=\"text\" name=\"coupon_code\" class=\"input-text\" id=\"coupon_code\" value=\"\" placeholder=\"&lt;?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?&gt;\" \/&gt; &lt;button type=\"submit\" class=\"button\" name=\"apply_coupon\" value=\"&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;\"&gt;&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;&lt;\/button&gt;\n        &lt;?php do_action( 'woocommerce_cart_coupon' ); ?&gt;\n    &lt;\/div&gt;\n&lt;?php } ?&gt;\n...<\/code><\/pre>\n<p>Ce que vous devez faire est de commenter la sortie li\u00e9e au coupon. Je recommande d&rsquo;ajouter un commentaire PHP <code>\/*<\/code>juste avant le <code>if<\/code>-check et de le fermer <code>*\/<\/code>juste apr\u00e8s la parenth\u00e8se fermante. Ainsi:<\/p>\n<pre><code>...\n&lt;?php \/* if (wc_coupons_enabled()) { ?&gt;\n    &lt;div class=\"coupon\"&gt;\n        &lt;label for=\"coupon_code\"&gt;&lt;?php esc_html_e( 'Coupon:', 'woocommerce' ); ?&gt;&lt;\/label&gt; &lt;input type=\"text\" name=\"coupon_code\" class=\"input-text\" id=\"coupon_code\" value=\"\" placeholder=\"&lt;?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?&gt;\" \/&gt; &lt;button type=\"submit\" class=\"button\" name=\"apply_coupon\" value=\"&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;\"&gt;&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;&lt;\/button&gt;\n        &lt;?php do_action( 'woocommerce_cart_coupon' ); ?&gt;\n    &lt;\/div&gt;\n&lt;?php } *\/ ?&gt;\n...<\/code><\/pre>\n<p>\u00c0 ce stade, la fonctionnalit\u00e9 de coupon de votre boutique en ligne devrait \u00eatre pratiquement masqu\u00e9e pour les clients\u00a0! Mais votre remise personnalis\u00e9e devrait parfaitement fonctionner.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans ce didacticiel, nous verrons comment ajouter une remise par programmation dans WooCommerce. Nous utilisons des coupons mais nous le rendons automatique et nous cachons qu&rsquo;il s&rsquo;agit d&rsquo;un coupon.<\/p>\n","protected":false},"author":1,"featured_media":152867,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,893,915,1110,811,811,841,841,852,852,862,862],"tags":[1167],"class_list":{"0":"post-234232","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-autre","8":"category-code-2","11":"category-n-a","12":"category-plugins-2","14":"category-tutoriels","16":"category-woocommerce-3","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234232"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234232\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/152867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}