{"id":233571,"date":"2023-02-18T16:28:00","date_gmt":"2023-02-18T13:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233571"},"modified":"2022-11-11T00:24:16","modified_gmt":"2022-11-10T21:24:16","slug":"guide-om-hur-du-laegger-till-anpassade-avgifter-till-woocommerce-checkout-med-kod","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/guide-om-hur-du-laegger-till-anpassade-avgifter-till-woocommerce-checkout-med-kod\/","title":{"rendered":"Guide om hur du l\u00e4gger till anpassade avgifter till WooCommerce Checkout med kod"},"content":{"rendered":"\n<p>Det finns vissa fall d\u00e5 du kan beh\u00f6va l\u00e4gga till en avgift till varukorgens totalsumma. Ibland bara om ett visst villkor \u00e4r uppfyllt, till exempel beroende p\u00e5 varukorgens totalsumma eller fraktplats. Med WooCommerce \u00e4r det ganska enkelt att l\u00e4gga till en avgift \u2013 mycket enklare \u00e4n att l\u00e4gga till en rabatt faktiskt. I det h\u00e4r inl\u00e4gget kommer vi att l\u00e4ra oss hur du l\u00e4gger till en anpassad avgift till WooCommerce.<\/p>\n<p>WooCommerce har en inbyggd funktion i varukorgsobjektet f\u00f6r att l\u00e4gga till avgifter. Allt du beh\u00f6ver \u00e4r att haka p\u00e5 r\u00e4tt \u00e5tg\u00e4rd och med det medf\u00f6ljande kundvagnsobjektet anropa en funktion f\u00f6r att l\u00e4gga till en avgift. WooCommerce kommer automatiskt att visa avgifter i varukorgen och kassasumman. Du best\u00e4mmer avgiftens etikett och belopp.<\/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 om hur du l\u00e4gger till anpassade avgifter till WooCommerce Checkout med kod\" ><\/a><\/p>\n<p>Det \u00e4r viktigt att notera att avgiftsbeloppet <strong>inte kan vara negativt<\/strong> \u2013 vilket ger kunden rabatt. Detta &quot;hack&quot; brukade fungera tidigare i \u00e4ldre WooCommerce-versioner, men inte l\u00e4ngre.<\/p>\n<p>L\u00e5t oss g\u00e5 in p\u00e5 detaljerna i koden! Den enda kroken du beh\u00f6ver bry dig om \u00e4r <code>woocommerce_cart_calculate_fees<\/code>. Inuti denna krok kan du f\u00e5 tag p\u00e5 vagnsobjektet genom att ringa <code>WC()-&gt;cart<\/code>. Med det objektet kan du anropa <code>add_fee()<\/code>som accepterar fyra parametrar (du beh\u00f6ver f\u00f6rmodligen bara de tv\u00e5 f\u00f6rst); <code>add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string)<\/code>. De tv\u00e5 f\u00f6rsta \u00e4r sj\u00e4lvf\u00f6rklarande. Den tredje parametern \u00e4r en boolean som avg\u00f6r om avgiften \u00e4r skattepliktig eller inte. Och den fj\u00e4rde \u00e4r f\u00f6r att tillhandah\u00e5lla en skatteklass f\u00f6r avgiften (om den tredje parametern \u00e4r sann). Men det kan l\u00e4mnas tomt f\u00f6r standardskatteklass.<\/p>\n<h2>L\u00e4gger till en fast avgift<\/h2>\n<p>Att l\u00e4gga till en anpassad avgift g\u00f6rs i sin enklaste form s\u00e5 h\u00e4r:<\/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>Det f\u00f6rsta steget \u00e4r att f\u00f6rhindra att en avgift l\u00e4ggs till om vi \u00e4r i admin eller om Ajax p\u00e5g\u00e5r. D\u00e4refter ropar vi <code>add_fee()<\/code>p\u00e5 vagnsobjektet. Detta kommer att l\u00e4gga till en avgift som heter &quot;En liten avgift&quot; med v\u00e4rdet 5. V\u00e4rdet kommer att vara i vilken valuta du \u00e4n har i din butik. Om butikens valuta \u00e4r inst\u00e4lld p\u00e5 dollar blir den $5. Anpassa namn och m\u00e4ngd efter dina behov.<\/p>\n<h2>L\u00e4gga till en avgift i procent av totalsumman f\u00f6r varukorgen<\/h2>\n<p>Om du vill att avgiftsbeloppet ska vara en procentandel av totalsumman f\u00f6r varukorgen beh\u00f6ver du bara ber\u00e4kna det annorlunda. Kom ih\u00e5g att vi alltid har tillg\u00e5ng till varukorgsobjektet genom att ringa <code>WC()-&gt;cart<\/code>och d\u00e4rifr\u00e5n kan vi h\u00e4mta totalsummorna.<\/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>Ovanst\u00e5ende kod kommer att l\u00e4gga till en avgift som uppg\u00e5r till 5 % av varukorgens totala summa, vilket \u00e4r varukorgens totala summa (<code>get_cart_contents_total()<\/code>) plus varukorgens fraktkostnad (<code>get_shipping_total()<\/code>). Justera kursen och vilka summor som ska inkluderas eller exkluderas i det du beh\u00f6ver.<\/p>\n<p>S\u00e5 det h\u00e4r \u00e4r ganska trevligt, men i vissa fall kanske vi vill anpassa n\u00e4r vi ska l\u00e4gga till en avgift. Kanske vill du l\u00e4gga till en avgift endast f\u00f6r en viss fraktmetod, betalningsmetod eller baserat p\u00e5 varukorgens totala summa. Processen \u00e4r densamma, vi l\u00e4gger bara till avgiften endast om v\u00e5ra villkor \u00e4r uppfyllda.<\/p>\n<h2>L\u00e4gger till en avgift beroende p\u00e5 varukorgsumman<\/h2>\n<p>S\u00e4g att du bara ville l\u00e4gga till en avgift om varukorgsumman var under ett visst belopp. Anta att du vill l\u00e4gga till en avgift f\u00f6r hantering av sm\u00e5 belopp. Du kan g\u00f6ra s\u00e5 h\u00e4r:<\/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>Anv\u00e4nd <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>f\u00f6r att f\u00e5 flott\u00f6rnumret f\u00f6r den totala varukorgen, exklusive frakt. (Om du vill inkludera frakt ocks\u00e5, titta ovan f\u00f6r att l\u00e4gga till procentavgift f\u00f6r hur du f\u00e5r fraktsummor). G\u00f6r sedan dina j\u00e4mf\u00f6relser.<\/p>\n<p>Du kan ocks\u00e5 v\u00e4nda den och best\u00e4mma dig f\u00f6r att l\u00e4gga till en avgift om vagnen var \u00f6ver en viss gr\u00e4ns.<\/p>\n<h2>L\u00e4gger till en avgift beroende p\u00e5 leveransplats<\/h2>\n<p>Du kan ocks\u00e5 l\u00e4gga till en avgift beroende p\u00e5 fraktort, till exempel per land. P\u00e5 samma s\u00e4tt som att f\u00e5 kundvagnsobjekt kan vi anv\u00e4nda <code>WC()-&gt;customer<\/code>f\u00f6r kundobjektet. T\u00e4nk p\u00e5 att n\u00e4r kunden inte \u00e4r inloggad och \u00e4nnu inte kommit till kassan och fyllt i sin adress kommer v\u00e4rdena p\u00e5 kundobjektet att vara tomma eller standardinst\u00e4llningarna inst\u00e4llda i din butik.<\/p>\n<p>Du m\u00e5ste k\u00e4nna till landskoden \u2013 h\u00e4r \u00e4r en <a href=\"http:\/\/creatingawebstore.com\/woocommerce-country-codes-and-state-codes-list.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bra landskodreferens<\/a>. H\u00e4r \u00e4r ett exempel p\u00e5 att l\u00e4gga till en avgift om kunden \u00e4r fr\u00e5n Norge.<\/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>L\u00e4gger till en avgift beroende p\u00e5 vald fraktmetod<\/h2>\n<p>Att f\u00e5 leveransmetoden \u00e4r lite sv\u00e5rare eftersom det beror p\u00e5 anv\u00e4ndarens session och inte kommer i ett &quot;trevligt begripligt format&quot;. Du kan f\u00e5 tag p\u00e5 det aktuella valda frakts\u00e4ttet med <code>WC()-&gt;session-&gt;get('chosen_shipping_methods')<\/code>. Observera att det st\u00e5r &quot;metoder&quot; och inte &quot;metod&quot;, s\u00e5 detta returnerar en array. Normalt inneh\u00e5ller arrayen ett element, d\u00e4r varje element best\u00e5r av str\u00e4ngar av frakt-ID, ett kolon och ett ID efter det. Jag rekommenderar att du anv\u00e4nder PHP-str\u00e4ngmetoder f\u00f6r att kontrollera om str\u00e4ngen inneh\u00e5ller ID:t \u2013 till exempel <code>strpos()<\/code>\u2013 och inte om det \u00e4r lika.<\/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>L\u00e4gger till en avgift beroende p\u00e5 vald betalningsmetod<\/h2>\n<p>Om du ville l\u00e4gga till en avgift beroende p\u00e5 vilken betalningsgateway som valdes, kan du f\u00e5 tag p\u00e5 den aktuella valda betalningsgatewayen med <code>WC()-&gt;session-&gt;get('chosen_payment_method')<\/code>och g\u00f6ra en j\u00e4mf\u00f6relse med dess namn (t.ex. f\u00f6r Paypal skulle den \u00e5terkomma <code>'paypal'<\/code>). Men du kanske m\u00e4rker att n\u00e4r kunden v\u00e4xlar mellan betalningsgateways i kassan l\u00e4ggs avgiften inte till eller tas bort dynamiskt. S\u00e5 du kommer att beh\u00f6va l\u00e4gga till lite extra Javascript f\u00f6r att s\u00e4kerst\u00e4lla att WooCommerce uppdaterar varukorgen s\u00e5 att din avgift fungerar konsekvent.<\/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>F\u00f6r att l\u00e4gga till Javascript vi hakar p\u00e5 <code>woocommerce_review_order_before_payment<\/code>som sker precis f\u00f6re betalningsrutan i kassan och matar ut inline-skript. Allt koden g\u00f6r \u00e4r att trigga WooCommerces hook <code>update_checkout<\/code>n\u00e4r valet av betalningsmetod \u00e4ndras. Detta s\u00e4kerst\u00e4ller att alla n\u00f6dv\u00e4ndiga PHP-metoder och krokar k\u00f6rs (inklusive avgiftskroken) varje g\u00e5ng varukorgen uppdateras.<\/p>\n<h2>L\u00e4gger till en avgift beroende p\u00e5 vilka produkter som finns i varukorgen<\/h2>\n<p>Jag kommer att n\u00e4mna det tidigare, men jag n\u00e4mner det igen: Du har full tillg\u00e5ng till kundvagnsobjektet med <code>WC()-&gt;cart<\/code>, s\u00e5 du kan s\u00f6ka i varukorgens inneh\u00e5ll efter ett specifikt produkt-ID och l\u00e4gga till en avgift om det finns i varukorgen.<\/p>\n<p>Genom att anv\u00e4nda <code>WC()-&gt;cart-&gt;get_cart_contents()<\/code>returnerar en m\u00e4ngd av alla produkter i kundvagnen. Du kan antingen g\u00e5 igenom detta med en enkel <code>foreach<\/code>slinga och kontrollera varje produkt till \u00f6nskat skick, eller om du helt enkelt vill leta efter ID kan du extrahera alla produkt-ID p\u00e5 en rad s\u00e5 h\u00e4r:<\/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>Exemplet nedan visar hur du kan l\u00e4gga till en avgift beroende p\u00e5 att varukorgen inneh\u00e5ller en produkt med ett visst 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>Du kan ocks\u00e5 anv\u00e4nda liknande operationer f\u00f6r att extrahera kvantiteter om du beh\u00f6ver l\u00e4gga till en avgift n\u00e4r en kund l\u00e4gger till en riktigt stor m\u00e4ngd av n\u00e5got.<\/p>\n<h2>Sammanfattningsvis<\/h2>\n<p>Det h\u00e4r inl\u00e4gget har visat dig hur du l\u00e4gger till en anpassad avgift, och genom fem exempel hur du l\u00e4gger till en avgift beroende p\u00e5 vissa villkor. Dessa f\u00f6rh\u00e5llanden var allt jag har st\u00f6tt p\u00e5 och kunde komma p\u00e5, och de borde \u00e5tminstone ge tips om hur man f\u00e5r tag p\u00e5 information f\u00f6r att ytterligare anpassa dina villkor. L\u00e5t mig veta om de fungerade f\u00f6r dig, eller om du har hittat ett annat tillst\u00e5nd som jag inte t\u00e4nkt p\u00e5!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Den h\u00e4r guiden visar hur du l\u00e4gger till en anpassad avgift till WooCommerce-varukorgsumman, och \u00e4ven l\u00e4gger till den beroende p\u00e5 leveransplats eller betalningsmetod.<\/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":[901,724,848,901,1110,818,818,848,724,858,858,868,868],"tags":[1173],"class_list":["post-233571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-utvecklaren","category-handledningar","category-n-a","category-plugins-3","category-woocommerce-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233571"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233571\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224911"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}