{"id":233619,"date":"2023-02-18T17:10:00","date_gmt":"2023-02-18T14:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233619"},"modified":"2022-11-11T00:40:48","modified_gmt":"2022-11-10T21:40:48","slug":"guida-su-come-aggiungere-commissioni-personalizzate-a-woocommerce-checkout-tramite-codice","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/guida-su-come-aggiungere-commissioni-personalizzate-a-woocommerce-checkout-tramite-codice\/","title":{"rendered":"Guida su come aggiungere commissioni personalizzate a WooCommerce Checkout tramite codice"},"content":{"rendered":"\n<p>In alcuni casi potrebbe essere necessario aggiungere una commissione ai totali del carrello. A volte solo se viene soddisfatta una determinata condizione, ad esempio a seconda dei totali del carrello o del luogo di spedizione. Con WooCommerce aggiungere una commissione \u00e8 abbastanza facile, molto pi\u00f9 facile che aggiungere uno sconto in effetti. In questo post impareremo come aggiungere una tariffa personalizzata a WooCommerce.<\/p>\n<p>WooCommerce ha una funzione integrata nell&#8217;oggetto carrello per l&#8217;aggiunta di commissioni. Tutto ci\u00f2 che serve \u00e8 agganciarsi all&#8217;azione giusta e, con l&#8217;oggetto carrello fornito, chiamare una funzione per aggiungere una commissione. WooCommerce visualizzer\u00e0 automaticamente le commissioni nel carrello e i totali del checkout. Decidi tu l&#8217;etichetta e l&#8217;importo della commissione.<\/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=\"Guida su come aggiungere commissioni personalizzate a WooCommerce Checkout tramite codice\" ><\/a><\/p>\n<p>\u00c8 importante notare che l&#8217;importo della commissione <strong>non pu\u00f2 essere negativo<\/strong>, dando cos\u00ec al cliente uno sconto. Questo &quot;hack&quot; funzionava prima nelle versioni precedenti di WooCommerce, ma non pi\u00f9.<\/p>\n<p>Entriamo nel dettaglio del codice! L&#8217;unico gancio di cui devi preoccuparti \u00e8 <code>woocommerce_cart_calculate_fees<\/code>. All&#8217;interno di questo gancio puoi ottenere l&#8217;oggetto carrello chiamando <code>WC()-&gt;cart<\/code>. Con quell&#8217;oggetto puoi chiamare <code>add_fee()<\/code>che accetta quattro parametri (probabilmente ti servono solo i due prima); <code>add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string)<\/code>. I primi due sono autoesplicativi. Il terzo parametro \u00e8 un booleano che decide se il canone \u00e8 imponibile o meno. E il quarto \u00e8 fornire una classe fiscale per la tassa (se il terzo parametro \u00e8 vero). Ma pu\u00f2 essere lasciato vuoto per la classe fiscale standard.<\/p>\n<h2>Aggiungendo una quota fissa<\/h2>\n<p>L&#8217;aggiunta di una tariffa personalizzata avviene nella sua forma pi\u00f9 semplice in questo modo:<\/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>Il primo passo \u00e8 impedire l&#8217;aggiunta di una commissione se siamo in admin o se Ajax \u00e8 in corso. Quindi chiamiamo <code>add_fee()<\/code>l&#8217;oggetto carrello. Ci\u00f2 aggiunger\u00e0 una commissione denominata &quot;Una piccola commissione&quot; con il valore di 5. Il valore sar\u00e0 in qualsiasi valuta tu abbia nel tuo negozio. Se la valuta del negozio \u00e8 impostata su dollari, diventa $ 5. Regola il nome e l&#8217;importo in base alle tue esigenze.<\/p>\n<h2>Aggiunta di una commissione come percentuale del totale del carrello<\/h2>\n<p>Se vuoi che l&#8217;importo della commissione sia una percentuale del totale del carrello, devi solo calcolarlo in modo diverso. Ricorda che abbiamo sempre accesso all&#8217;oggetto carrello chiamando <code>WC()-&gt;cart<\/code>e da quello possiamo recuperare i totali.<\/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>Il codice sopra aggiunger\u00e0 una commissione che ammonta al 5% del totale del carrello, ovvero il totale degli articoli del carrello (<code>get_cart_contents_total()<\/code>) pi\u00f9 il costo di spedizione del carrello (<code>get_shipping_total()<\/code>). Regola la tariffa e quali totali includere o escludere in ci\u00f2 di cui hai bisogno.<\/p>\n<p>Quindi questo \u00e8 piuttosto carino, ma in alcuni casi potremmo voler personalizzare quando aggiungere una commissione. Forse vuoi aggiungere una commissione solo per un determinato metodo di spedizione, metodo di pagamento o in base al totale del carrello. Il processo \u00e8 lo stesso, aggiungiamo solo la tariffa solo se le nostre condizioni sono soddisfatte.<\/p>\n<h2>Aggiunta di una commissione in base ai totali del carrello<\/h2>\n<p>Supponi di voler aggiungere una commissione solo se i totali del carrello erano inferiori a un determinato importo. Supponi di voler aggiungere una commissione per la gestione di piccoli importi. Potresti farlo cos\u00ec:<\/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>Utilizzare <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>per ottenere il numero di float del totale del carrello, esclusa la spedizione. (Se desideri includere anche la spedizione, guarda sopra nell&#8217;aggiunta della commissione percentuale su come ottenere i totali di spedizione). Quindi fai i tuoi confronti.<\/p>\n<p>Potresti anche girarlo e decidere di aggiungere una commissione se il carrello superava un certo limite.<\/p>\n<h2>Aggiunta di una commissione a seconda del luogo di spedizione<\/h2>\n<p>Puoi anche aggiungere una commissione a seconda del luogo di spedizione, ad esempio per paese. Analogamente a ottenere l&#8217;oggetto del carrello, possiamo usarlo <code>WC()-&gt;customer<\/code>per l&#8217;oggetto del cliente. Tieni presente che quando il cliente non \u00e8 loggato e non \u00e8 ancora arrivato alla cassa e ha inserito il proprio indirizzo, i valori dell&#8217;oggetto cliente saranno vuoti o le impostazioni predefinite nel tuo negozio.<\/p>\n<p>Avrai bisogno di conoscere il codice del paese: ecco un <a href=\"http:\/\/creatingawebstore.com\/woocommerce-country-codes-and-state-codes-list.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bel riferimento del codice del paese<\/a>. Ecco un esempio di aggiunta di una commissione se il cliente \u00e8 norvegese.<\/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>Aggiunta di una commissione in base al metodo di spedizione scelto<\/h2>\n<p>Ottenere il metodo di spedizione \u00e8 un po&#8217; pi\u00f9 complicato poich\u00e9 dipende dalla sessione dell&#8217;utente e non \u00e8 disponibile in un &quot;formato comprensibile&quot;. Puoi ottenere il metodo di spedizione attualmente scelto con <code>WC()-&gt;session-&gt;get('chosen_shipping_methods')<\/code>. Nota che dice &quot;metodi&quot; e non &quot;metodo&quot;, quindi questo restituisce un array. Normalmente l&#8217;array contiene un elemento, in cui ogni elemento \u00e8 costituito da stringhe di ID spedizione, due punti e un ID dopo di esso. Raccomando di utilizzare i metodi di stringa PHP per verificare se la stringa contiene l&#8217;ID, ad esempio <code>strpos()<\/code>, e non se \u00e8 uguale.<\/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>Aggiunta di una commissione a seconda del metodo di pagamento scelto<\/h2>\n<p>Se si desidera aggiungere una commissione a seconda del gateway di pagamento scelto, \u00e8 possibile ottenere l&#8217;attuale gateway di pagamento scelto <code>WC()-&gt;session-&gt;get('chosen_payment_method')<\/code>e fare un confronto con il suo nome (ad esempio per Paypal ritornerebbe <code>'paypal'<\/code>). Tuttavia, potresti notare che quando il cliente passa da un gateway di pagamento all&#8217;altro al momento del pagamento, la commissione non viene aggiunta o rimossa dinamicamente. Quindi dovrai aggiungere alcuni Javascript aggiuntivi per assicurarti che WooCommerce aggiorni il carrello in modo che la tua tariffa funzioni in modo coerente.<\/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>Per aggiungere il Javascript ci agganciamo <code>woocommerce_review_order_before_payment<\/code>che si verifica subito prima della casella di pagamento nel checkout e nello script inline di output. Tutto ci\u00f2 che fa il codice \u00e8 attivare l&#8217;hook di WooCommerce <code>update_checkout<\/code>ogni volta che viene modificata la scelta del metodo di pagamento. Ci\u00f2 garantisce che tutti i metodi e gli hook PHP necessari vengano eseguiti (incluso il fee hook) ogni volta che il carrello viene aggiornato.<\/p>\n<h2>Aggiunta di una commissione a seconda di quali prodotti sono nel carrello<\/h2>\n<p>L&#8217;ho menzionato prima, ma lo menzioner\u00f2 di nuovo: hai pieno accesso all&#8217;oggetto carrello con <code>WC()-&gt;cart<\/code>, quindi puoi cercare nel contenuto del carrello un ID prodotto specifico e aggiungere una commissione se esiste nel carrello.<\/p>\n<p>Utilizzando <code>WC()-&gt;cart-&gt;get_cart_contents()<\/code>restituisce una matrice di tutti i prodotti nel carrello. Puoi scorrere questo ciclo con un semplice <code>foreach<\/code>ciclo e controllare ogni prodotto alle condizioni desiderate, oppure se vuoi semplicemente controllare gli ID puoi estrarre tutti gli ID prodotto in una riga in questo modo:<\/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&#8217;esempio seguente mostra come aggiungere una commissione a seconda che il carrello contenga un prodotto con un determinato ID:<\/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>Puoi anche utilizzare operazioni simili per estrarre quantit\u00e0 se devi aggiungere una commissione quando un cliente aggiunge una quantit\u00e0 davvero grande di qualcosa.<\/p>\n<h2>Insomma<\/h2>\n<p>Questo post ti ha mostrato come aggiungere una tariffa personalizzata e, attraverso cinque esempi, come aggiungere una commissione a seconda di determinate condizioni. Queste condizioni erano tutto ci\u00f2 che ho incontrato e a cui potevo pensare, e dovrebbero almeno fornire suggerimenti su come ottenere informazioni per personalizzare ulteriormente le tue condizioni. Fammi sapere se hanno funzionato per te, o se hai trovato un&#8217;altra condizione a cui non avevo pensato!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questa guida ti mostra come aggiungere una tariffa personalizzata ai totali del carrello WooCommerce e aggiungerla a seconda del luogo di spedizione o del metodo di pagamento.<\/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":[896,896,720,1110,814,814,720,844,844,855,855,865,865],"tags":[1168],"class_list":["post-233619","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-n-a","category-plugin-2","category-tutorial","category-woocommerce-6","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233619"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233619\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224911"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}