{"id":234233,"date":"2023-02-18T16:57:00","date_gmt":"2023-02-18T13:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234233"},"modified":"2022-11-12T01:24:01","modified_gmt":"2022-11-11T22:24:01","slug":"guide-sur-la-facon-dajouter-des-frais-personnalises-a-woocommerce-checkout-par-code","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/guide-sur-la-facon-dajouter-des-frais-personnalises-a-woocommerce-checkout-par-code\/","title":{"rendered":"Guide sur la fa\u00e7on d&rsquo;ajouter des frais personnalis\u00e9s \u00e0 WooCommerce Checkout par code"},"content":{"rendered":"\n<p>Dans certains cas, vous devrez peut-\u00eatre 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&rsquo;exp\u00e9dition. Avec WooCommerce, ajouter des frais est assez facile &#8211; beaucoup plus facile que d&rsquo;ajouter une remise en fait. Dans cet article, nous apprendrons comment ajouter des frais personnalis\u00e9s \u00e0 WooCommerce.<\/p>\n<p>WooCommerce a une fonction int\u00e9gr\u00e9e dans l&rsquo;objet panier pour ajouter des frais. Tout ce dont vous avez besoin est de vous accrocher \u00e0 la bonne action et, avec l&rsquo;objet panier fourni, d&rsquo;appeler une fonction pour ajouter des frais. WooCommerce affichera automatiquement les frais dans le panier et les totaux de paiement. Vous d\u00e9cidez du libell\u00e9 et du montant des frais.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152845-61e4fc291b3a1.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-152845-61e4fc291b3a1.png\" alt=\"Guide sur la fa\u00e7on d&#039;ajouter des frais personnalis\u00e9s \u00e0 WooCommerce Checkout par code\" ><\/a><\/p>\n<p>Il est important de noter que le montant des frais <strong>ne peut pas \u00eatre n\u00e9gatif<\/strong>, ce qui donne au client une remise. Ce &quot;hack&quot; fonctionnait auparavant dans les anciennes versions de WooCommerce, mais plus maintenant.<\/p>\n<p>Entrons dans les d\u00e9tails du code! Le seul crochet dont vous devez vous pr\u00e9occuper est <code>woocommerce_cart_calculate_fees<\/code>. \u00c0 l&rsquo;int\u00e9rieur de ce crochet, vous pouvez obtenir l&rsquo;objet cart en appelant <code>WC()-&gt;cart<\/code>. Avec cet objet, vous pouvez appeler <code>add_fee()<\/code>qui accepte quatre param\u00e8tres (vous n&rsquo;avez probablement besoin que des deux premiers)\u00a0; <code>add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string)<\/code>. Les deux premiers sont explicites. Le troisi\u00e8me param\u00e8tre est un bool\u00e9en qui d\u00e9cide si les frais sont imposables ou non. Et le quatri\u00e8me est de fournir une classe de taxe pour les frais (si le troisi\u00e8me param\u00e8tre est vrai). Mais il peut \u00eatre laiss\u00e9 vide pour la classe de taxe standard.<\/p>\n<h2>Ajout d&rsquo;un forfait<\/h2>\n<p>L&rsquo;ajout de frais de douane se fait dans sa forme la plus simple comme ceci\u00a0:<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n    WC()-&gt;cart-&gt;add_fee(__('A small fee', 'txtdomain'), 5);\n});<\/code><\/pre>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 emp\u00eacher l&rsquo;ajout de frais si nous sommes en admin ou si Ajax est en cours. Ensuite, nous appelons <code>add_fee()<\/code>l&rsquo;objet cart. Cela ajoutera des frais nomm\u00e9s &quot;Une petite taxe&quot; d&rsquo;une valeur de 5. La valeur sera dans la devise que vous avez dans votre magasin. Si la devise du magasin est d\u00e9finie sur dollars, elle devient 5\u00a0$. Ajustez le nom et le montant \u00e0 vos besoins.<\/p>\n<h2>Ajouter des frais en pourcentage du total du panier<\/h2>\n<p>Si vous souhaitez que le montant des frais soit un pourcentage du total du panier, il vous suffit de le calculer diff\u00e9remment. N&rsquo;oubliez pas que nous avons toujours acc\u00e8s \u00e0 l&rsquo;objet panier en appelant <code>WC()-&gt;cart<\/code>et \u00e0 partir de l\u00e0, nous pouvons r\u00e9cup\u00e9rer les totaux.<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n    $percentage = 0.05;  \/\/ Percentage (5%) in float\n    $percentage_fee = (WC()-&gt;cart-&gt;get_cart_contents_total() + WC()-&gt;cart-&gt;get_shipping_total()) * $percentage;\n\u00a0\n    WC()-&gt;cart-&gt;add_fee(__('A small fee', 'txtdomain'), $percentage_fee);\n});<\/code><\/pre>\n<p>Le code ci-dessus ajoutera des frais s&rsquo;\u00e9levant \u00e0 5 % du total du panier, soit le total des articles du panier (<code>get_cart_contents_total()<\/code>) plus les frais d&rsquo;exp\u00e9dition du panier (<code>get_shipping_total()<\/code>). Ajustez le taux et les totaux \u00e0 inclure ou \u00e0 exclure dans ce dont vous avez besoin.<\/p>\n<p>C&rsquo;est donc plut\u00f4t sympa, mais dans certains cas, nous voudrons peut-\u00eatre personnaliser quand ajouter des frais. Peut-\u00eatre souhaitez-vous ajouter des frais uniquement pour un certain mode d&rsquo;exp\u00e9dition, un mode de paiement ou en fonction du total du panier. Le processus est le m\u00eame, nous ajoutons simplement les frais uniquement si nos conditions sont remplies.<\/p>\n<h2>Ajout de frais en fonction des totaux du panier<\/h2>\n<p>Supposons que vous vouliez ajouter des frais uniquement si les totaux du panier \u00e9taient inf\u00e9rieurs \u00e0 un certain montant. Supposons que vous souhaitiez ajouter des frais pour le traitement de petites quantit\u00e9s. Vous pourriez le faire comme ceci :<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n\u00a0\n    $cart_total = WC()-&gt;cart-&gt;get_cart_contents_total();  \/\/ This is excluding shipping\n    if ($cart_total &lt; 500) {\n        WC()-&gt;cart-&gt;add_fee(__('Fee for small transactions', 'txtdomain'), 50);\n    }\n});<\/code><\/pre>\n<p>Utilisez <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>pour obtenir le num\u00e9ro flottant du total du panier, hors frais de port. (Si vous souhaitez \u00e9galement inclure les frais d&rsquo;exp\u00e9dition, regardez ci-dessus en ajoutant des frais en pourcentage pour savoir comment obtenir les totaux d&rsquo;exp\u00e9dition). Ensuite, faites vos comparaisons.<\/p>\n<p>Vous pouvez \u00e9galement le retourner et d\u00e9cider d&rsquo;ajouter des frais si le panier d\u00e9passait une certaine limite.<\/p>\n<h2>Ajout de frais en fonction du lieu d&rsquo;exp\u00e9dition<\/h2>\n<p>Vous pouvez \u00e9galement ajouter des frais en fonction du lieu d&rsquo;exp\u00e9dition, par exemple par pays. De la m\u00eame mani\u00e8re que pour obtenir un objet panier, nous pouvons utiliser <code>WC()-&gt;customer<\/code>pour l&rsquo;objet client. Gardez \u00e0 l&rsquo;esprit que lorsque le client n&rsquo;est pas connect\u00e9 et n&rsquo;est pas encore arriv\u00e9 \u00e0 la caisse et a renseign\u00e9 son adresse, les valeurs de l&rsquo;objet client seront vides ou les valeurs par d\u00e9faut d\u00e9finies dans votre boutique.<\/p>\n<p>Vous aurez besoin de conna\u00eetre le code du pays &#8211; voici une <a href=\"http:\/\/creatingawebstore.com\/woocommerce-country-codes-and-state-codes-list.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">belle r\u00e9f\u00e9rence de code de pays<\/a>. Voici un exemple d&rsquo;ajout de frais si le client vient de Norv\u00e8ge.<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n\u00a0\n    $shipping_country = WC()-&gt;customer-&gt;get_shipping_country(); \n    if ($shipping_country == 'NO') {\n        WC()-&gt;cart-&gt;add_fee(__('Fee for shipping to Norway', 'txtdomain'), 50);\n    }\n});<\/code><\/pre>\n<h2>Ajout de frais en fonction du mode d&rsquo;exp\u00e9dition choisi<\/h2>\n<p>Obtenir la m\u00e9thode d&rsquo;exp\u00e9dition est un peu plus d\u00e9licat car cela d\u00e9pend de la session de l&rsquo;utilisateur et ne se pr\u00e9sente pas dans un &quot;format agr\u00e9able et compr\u00e9hensible&quot;. Vous pouvez obtenir la m\u00e9thode d&rsquo;exp\u00e9dition actuellement choisie avec <code>WC()-&gt;session-&gt;get('chosen_shipping_methods')<\/code>. Notez qu&rsquo;il est \u00e9crit \u00ab\u00a0m\u00e9thodes\u00a0\u00bb et non \u00ab\u00a0m\u00e9thode\u00a0\u00bb, cela renvoie donc un tableau. Normalement, le tableau contient un \u00e9l\u00e9ment, o\u00f9 chaque \u00e9l\u00e9ment se compose de cha\u00eenes d&rsquo;ID d&rsquo;exp\u00e9dition, de deux-points et d&rsquo;un ID apr\u00e8s celui-ci. Je recommande d&rsquo;utiliser les m\u00e9thodes de cha\u00eene PHP pour v\u00e9rifier si la cha\u00eene contient l&rsquo;ID &#8211; par exemple <code>strpos()<\/code>&#8211; et non s&rsquo;il est \u00e9gal.<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n\u00a0\n    $chosen_shipping_method = WC()-&gt;session-&gt;get('chosen_shipping_methods');\n\u00a0\n    if (strpos($chosen_shipping_method[0], 'flat_rate') !== false) {\n        WC()-&gt;cart-&gt;add_fee(__('Fee for flat rate shipping', 'txtdomain'), 50);\n    }\n});<\/code><\/pre>\n<h2>Ajout de frais en fonction du mode de paiement choisi<\/h2>\n<p>Si vous souhaitez ajouter des frais en fonction de la passerelle de paiement choisie, vous pouvez obtenir la passerelle de paiement actuellement choisie avec <code>WC()-&gt;session-&gt;get('chosen_payment_method')<\/code>et faire une comparaison avec son nom (par exemple, pour Paypal, il reviendrait <code>'paypal'<\/code>). Cependant, vous remarquerez peut-\u00eatre que lorsque le client change de passerelle de paiement lors du paiement, les frais ne sont pas ajout\u00e9s ou supprim\u00e9s dynamiquement. Vous devrez donc ajouter du Javascript suppl\u00e9mentaire pour vous assurer que WooCommerce met \u00e0 jour le panier afin que vos frais fonctionnent de mani\u00e8re coh\u00e9rente.<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n\u00a0\n    $chosen_payment_method = WC()-&gt;session-&gt;get('chosen_payment_method');\n    if ($chosen_payment_method == 'paypal') {\n        WC()-&gt;cart-&gt;add_fee(__('Paypal Fee', 'txtdomain'), 50);\n    }\n});\n\u00a0\nadd_action('woocommerce_review_order_before_payment', function() {\n    ?&gt;&lt;script type=\"text\/javascript\"&gt;\n        (function($){\n            $('form.checkout').on('change', 'input[name^=\"payment_method\"]', function() {\n                $('body').trigger('update_checkout');\n            });\n        })(jQuery);\n    &lt;\/script&gt;&lt;?php\n});<\/code><\/pre>\n<p>Pour ajouter le Javascript, nous nous accrochons \u00e0 <code>woocommerce_review_order_before_payment<\/code>ce qui se produit juste avant la bo\u00eete de paiement lors du paiement et du script en ligne de sortie. Tout ce que le code fait, c&rsquo;est d\u00e9clencher le crochet de WooCommerce <code>update_checkout<\/code>chaque fois que le choix du mode de paiement est modifi\u00e9. Cela garantit que toutes les m\u00e9thodes et crochets PHP n\u00e9cessaires sont ex\u00e9cut\u00e9s (y compris le crochet de frais) chaque fois que le panier est mis \u00e0 jour.<\/p>\n<h2>Ajout de frais en fonction des produits dans le panier<\/h2>\n<p>Je l&rsquo;ai d\u00e9j\u00e0 mentionn\u00e9, mais je le r\u00e9p\u00e8te: vous avez un acc\u00e8s complet \u00e0 l&rsquo;objet du panier avec <code>WC()-&gt;cart<\/code>, vous pouvez donc rechercher dans le contenu du panier un ID de produit sp\u00e9cifique et ajouter des frais s&rsquo;il existe dans le panier.<\/p>\n<p>L&rsquo;utilisation <code>WC()-&gt;cart-&gt;get_cart_contents()<\/code>renvoie un tableau de tous les produits du panier. Vous pouvez soit parcourir cela avec une simple <code>foreach<\/code>boucle et v\u00e9rifier chaque produit dans l&rsquo;\u00e9tat souhait\u00e9, soit si vous souhaitez simplement v\u00e9rifier les ID, vous pouvez extraire tous les ID de produit sur une seule ligne, comme suit\u00a0:<\/p>\n<pre><code>$products_in_cart = WC()-&gt;cart-&gt;get_cart_contents();\n$product_ids_in_cart = array_column(array_values($products_in_cart), 'product_id');\n\/\/ Now you can use e.g. in_array() to check for certain product IDs.<\/code><\/pre>\n<p>L&rsquo;exemple ci-dessous montre comment vous pouvez ajouter des frais selon que le panier contient un produit d&rsquo;un certain ID\u00a0:<\/p>\n<pre><code>add_action('woocommerce_cart_calculate_fees', function() {\n    if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n        return;\n    }\n\u00a0\n    $really_expensive_product_id = 12;  \/\/ product ID that triggers a fee\n\u00a0\n    $products_in_cart = WC()-&gt;cart-&gt;get_cart_contents();\n    $product_ids_in_cart = array_column(array_values($products_in_cart), 'product_id');\n    if (in_array($really_expensive_product_id, $product_ids_in_cart)) {\n        WC()-&gt;cart-&gt;add_fee(__('Fee for really expensive product', 'txtdomain'), 50);\n    }\n});<\/code><\/pre>\n<p>Vous pouvez \u00e9galement utiliser des op\u00e9rations similaires pour extraire des quantit\u00e9s si vous devez ajouter des frais lorsqu&rsquo;un client ajoute une tr\u00e8s grande quantit\u00e9 de quelque chose.<\/p>\n<h2>En conclusion<\/h2>\n<p>Cet article vous a montr\u00e9 comment ajouter des frais personnalis\u00e9s et, \u00e0 travers cinq exemples, comment ajouter des frais en fonction de certaines conditions. Ces conditions sont tout ce que j&rsquo;ai rencontr\u00e9 et auquel je pouvais penser, et elles devraient au moins donner des indications sur la fa\u00e7on d&rsquo;obtenir des informations pour personnaliser davantage vos conditions. Faites-moi savoir s&rsquo;ils ont fonctionn\u00e9 pour vous, ou si vous avez trouv\u00e9 une autre condition \u00e0 laquelle je n&rsquo;ai pas pens\u00e9 !<\/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>Ce guide vous montre comment ajouter des frais personnalis\u00e9s aux totaux du panier WooCommerce, et \u00e9galement les ajouter en fonction du lieu d&rsquo;exp\u00e9dition ou du mode de paiement.<\/p>\n","protected":false},"author":1,"featured_media":224911,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,1110,811,811,841,841,852,852,862,862],"tags":[1167],"class_list":["post-234233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-n-a","category-plugins-2","category-tutoriels","category-woocommerce-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234233","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=234233"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234233\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224911"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}