{"id":233586,"date":"2023-02-18T16:28:00","date_gmt":"2023-02-18T13:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233586"},"modified":"2022-11-11T00:29:20","modified_gmt":"2022-11-10T21:29:20","slug":"opas-mukautettujen-maksujen-lisaeaemiseen-woocommerce-checkoutiin-koodin-mukaan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/opas-mukautettujen-maksujen-lisaeaemiseen-woocommerce-checkoutiin-koodin-mukaan\/","title":{"rendered":"Opas mukautettujen maksujen lis\u00e4\u00e4miseen WooCommerce Checkoutiin koodin mukaan"},"content":{"rendered":"\n<p>Joissakin tapauksissa saatat joutua lis\u00e4\u00e4m\u00e4\u00e4n maksun ostoskorin loppusummaan. Joskus vain, jos tietty ehto t\u00e4yttyy, esimerkiksi ostoskorin kokonaissummasta tai toimituspaikasta riippuen. WooCommercen avulla maksun lis\u00e4\u00e4minen on melko helppoa \u2013 paljon helpompaa kuin itse asiassa alennuksen lis\u00e4\u00e4minen. T\u00e4ss\u00e4 viestiss\u00e4 opimme lis\u00e4\u00e4m\u00e4\u00e4n mukautetun maksun WooCommerceen.<\/p>\n<p>WooCommercessa on sis\u00e4\u00e4nrakennettu toiminto ostoskoriobjektissa maksujen lis\u00e4\u00e4mist\u00e4 varten. Sinun tarvitsee vain kytkeyty\u00e4 oikeaan toimintoon ja kutsua mukana toimitetulla ostoskoriobjektilla toiminto maksun lis\u00e4\u00e4miseksi. WooCommerce n\u00e4ytt\u00e4\u00e4 maksut automaattisesti ostoskorissa ja kassasummat. P\u00e4\u00e4t\u00e4t maksun etiketin ja m\u00e4\u00e4r\u00e4n.<\/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=\"Opas mukautettujen maksujen lis\u00e4\u00e4miseen WooCommerce Checkoutiin koodin mukaan\" ><\/a><\/p>\n<p>On t\u00e4rke\u00e4\u00e4 huomioida, ett\u00e4 maksun m\u00e4\u00e4r\u00e4 <strong>ei voi olla negatiivinen<\/strong>, jolloin asiakas saa alennuksen. T\u00e4m\u00e4 &quot;hakkerointi&quot; toimi aiemmin vanhemmissa WooCommerce-versioissa, mutta ei en\u00e4\u00e4.<\/p>\n<p>Menn\u00e4\u00e4n koodin yksityiskohtiin! Ainoa koukku, josta sinun on huolehdittava, on <code>woocommerce_cart_calculate_fees<\/code>. T\u00e4m\u00e4n koukun sis\u00e4ll\u00e4 p\u00e4\u00e4set k\u00e4siksi k\u00e4rryesineeseen soittamalla <code>WC()-&gt;cart<\/code>. T\u00e4ll\u00e4 objektilla voit kutsua, <code>add_fee()<\/code>joka hyv\u00e4ksyy nelj\u00e4 parametria (tarvitset todenn\u00e4k\u00f6isesti vain kaksi ensin); <code>add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string)<\/code>. Kaksi ensimm\u00e4ist\u00e4 ovat itsest\u00e4\u00e4n selvi\u00e4. Kolmas parametri on boolen arvo, joka p\u00e4\u00e4tt\u00e4\u00e4, onko maksu verotettava vai ei. Ja nelj\u00e4s on veroluokan tarjoaminen maksulle (jos kolmas parametri on totta). Mutta se voidaan j\u00e4tt\u00e4\u00e4 tyhj\u00e4ksi tavalliselle veroluokalle.<\/p>\n<h2>Lis\u00e4t\u00e4\u00e4n kiinte\u00e4 maksu<\/h2>\n<p>Mukautetun maksun lis\u00e4\u00e4minen tapahtuu yksinkertaisimmassa muodossaan seuraavasti:<\/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>Ensimm\u00e4inen askel on est\u00e4\u00e4 maksun lis\u00e4\u00e4minen, jos olemme j\u00e4rjestelm\u00e4nvalvojana tai jos Ajax on k\u00e4ynniss\u00e4. Seuraavaksi kutsumme <code>add_fee()<\/code>k\u00e4rrykohteen. T\u00e4m\u00e4 lis\u00e4\u00e4 &quot;Pieni maksu&quot; -nimisen maksun, jonka arvo on 5. Arvo on miss\u00e4 tahansa valuutassa, joka sinulla on kaupassasi. Jos kaupan valuutaksi on asetettu dollareita, siit\u00e4 tulee 5 dollaria. Muokkaa nimi ja summa tarpeidesi mukaan.<\/p>\n<h2>Lis\u00e4t\u00e4\u00e4n maksu prosenttiosuutena ostoskorin loppusummasta<\/h2>\n<p>Jos haluat maksun olevan prosenttiosuus ostoskorin kokonaissummasta, sinun on vain laskettava se eri tavalla. Muistathan, ett\u00e4 meill\u00e4 on aina p\u00e4\u00e4sy ostoskoriobjektiin soittamalla <code>WC()-&gt;cart<\/code>ja sielt\u00e4 voimme noutaa loppusummat.<\/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>Yll\u00e4 oleva koodi lis\u00e4\u00e4 maksun, joka on 5 % ostoskorin kokonaissummasta, joka on ostoskorin tuotteiden kokonaism\u00e4\u00e4r\u00e4 (<code>get_cart_contents_total()<\/code>) plus ostoskorin toimituskulut (<code>get_shipping_total()<\/code>). S\u00e4\u00e4d\u00e4 korkoa ja summat, jotka sis\u00e4llytet\u00e4\u00e4n tai j\u00e4tet\u00e4\u00e4n pois mit\u00e4 tarvitset.<\/p>\n<p>Joten t\u00e4m\u00e4 on melko mukavaa, mutta joissain tapauksissa saatamme haluta mukauttaa maksun lis\u00e4\u00e4misajankohtaa. Haluat ehk\u00e4 lis\u00e4t\u00e4 maksun vain tietyst\u00e4 toimitustavasta, maksutavasta tai ostoskorin loppusummasta. Prosessi on sama, lis\u00e4\u00e4mme vain maksun vain, jos ehdot t\u00e4yttyv\u00e4t.<\/p>\n<h2>Lis\u00e4t\u00e4\u00e4n maksu ostoskorin loppusummasta riippuen<\/h2>\n<p>Oletetaan, ett\u00e4 haluat lis\u00e4t\u00e4 maksun vain, jos ostoskorin kokonaissummat ovat alle tietyn summan. Oletetaan, ett\u00e4 haluat lis\u00e4t\u00e4 maksun pienten m\u00e4\u00e4rien k\u00e4sittelyst\u00e4. Voit tehd\u00e4 sen n\u00e4in:<\/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>K\u00e4yt\u00e4 <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>saadaksesi ostoskorin kokonaism\u00e4\u00e4r\u00e4n kelluvan numeron ilman toimituskuluja. (Jos haluat sis\u00e4llytt\u00e4\u00e4 my\u00f6s toimituskulut, katso yll\u00e4 olevasta prosenttiosuuden lis\u00e4\u00e4misest\u00e4 toimitussumman saamiseen). Tee sitten vertailut.<\/p>\n<p>Voit my\u00f6s k\u00e4\u00e4nt\u00e4\u00e4 sen ymp\u00e4ri ja p\u00e4\u00e4tt\u00e4\u00e4 lis\u00e4t\u00e4 maksun, jos k\u00e4rry ylitt\u00e4\u00e4 tietyn rajan.<\/p>\n<h2>Lis\u00e4t\u00e4\u00e4n toimitusmaksu riippuen toimituspaikasta<\/h2>\n<p>Voit lis\u00e4t\u00e4 maksun my\u00f6s toimituspaikan mukaan, esimerkiksi maittain. Samalla tavalla kuin ostoskoriobjektin hankkimista, voimme k\u00e4ytt\u00e4\u00e4 <code>WC()-&gt;customer<\/code>asiakaskohteena. Muista, ett\u00e4 kun asiakas ei ole kirjautunut sis\u00e4\u00e4n eik\u00e4 ole viel\u00e4 saapunut kassalle ja t\u00e4ytt\u00e4nyt osoitteensa, asiakasobjektin arvot ovat tyhji\u00e4 tai myym\u00e4l\u00e4ss\u00e4si asetettuja oletusarvoja.<\/p>\n<p>Sinun on tiedett\u00e4v\u00e4 maakoodi \u2013 t\u00e4ss\u00e4 on <a href=\"http:\/\/creatingawebstore.com\/woocommerce-country-codes-and-state-codes-list.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hyv\u00e4 maakoodiviittaus<\/a>. T\u00e4ss\u00e4 on esimerkki maksun lis\u00e4\u00e4misest\u00e4, jos asiakas on Norjasta.<\/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>Lis\u00e4t\u00e4\u00e4n maksu valitun toimitustavan mukaan<\/h2>\n<p>Toimitustavan saaminen on hieman hankalampaa, koska se riippuu k\u00e4ytt\u00e4j\u00e4n istunnosta, eik\u00e4 se ole &quot;mukavassa ymm\u00e4rrett\u00e4v\u00e4ss\u00e4 muodossa&quot;. Voit tarkistaa valitun toimitustavan k\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>WC()-&gt;session-&gt;get('chosen_shipping_methods')<\/code>. Huomaa, ett\u00e4 se sanoo &quot;methods&quot; eik\u00e4 &quot;method&quot;, joten t\u00e4m\u00e4 palauttaa taulukon. Normaalisti matriisi sis\u00e4lt\u00e4\u00e4 yhden elementin, jossa jokainen elementti koostuu toimitustunnuksen merkkijonoista, kaksoispisteest\u00e4 ja sen j\u00e4lkeen tunnuksesta. Suosittelen PHP-merkkijonomenetelmien k\u00e4ytt\u00f6\u00e4 tarkistaaksesi, sis\u00e4lt\u00e4\u00e4k\u00f6 merkkijono esimerkiksi tunnuksen, <code>strpos()<\/code>eik\u00e4 jos se on sama.<\/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>Lis\u00e4t\u00e4\u00e4n maksu valitun maksutavan mukaan<\/h2>\n<p>Jos halusit lis\u00e4t\u00e4 maksun valitun maksuyhdysk\u00e4yt\u00e4v\u00e4n mukaan, voit ottaa yhteytt\u00e4 nykyiseen valittuun maksuyhdysk\u00e4yt\u00e4v\u00e4\u00e4n <code>WC()-&gt;session-&gt;get('chosen_payment_method')<\/code>ja tehd\u00e4 vertailun sen nimeen (esim. Paypalille se palaa <code>'paypal'<\/code>). Saatat kuitenkin huomata, ett\u00e4 kun asiakas vaihtaa maksuyhdysk\u00e4yt\u00e4vien v\u00e4lill\u00e4 kassalla, maksua ei lis\u00e4t\u00e4 tai poisteta dynaamisesti. Joten sinun on lis\u00e4tt\u00e4v\u00e4 ylim\u00e4\u00e4r\u00e4inen Javascript varmistaaksesi, ett\u00e4 WooCommerce p\u00e4ivitt\u00e4\u00e4 ostoskorin, jotta maksusi toimii johdonmukaisesti.<\/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>Javascriptin lis\u00e4\u00e4mist\u00e4 varten kiinnit\u00e4mme siihen, <code>woocommerce_review_order_before_payment<\/code>joka tapahtuu kassalla ennen maksuruutua ja inline-skriptin tulosta. Koodi laukaisee vain WooCommercen koukun <code>update_checkout<\/code>aina, kun maksutavan valintaa muutetaan. T\u00e4m\u00e4 varmistaa, ett\u00e4 kaikki tarvittavat PHP-menetelm\u00e4t ja koukut suoritetaan (mukaan lukien maksukoukku) joka kerta kun ostoskori p\u00e4ivitet\u00e4\u00e4n.<\/p>\n<h2>Lis\u00e4t\u00e4\u00e4n maksu ostoskorissa olevien tuotteiden mukaan<\/h2>\n<p>Mainitsen sen aiemmin, mutta mainitsen sen uudelleen: Sinulla on t\u00e4ysi p\u00e4\u00e4sy ostoskoriobjektiin k\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>WC()-&gt;cart<\/code>, joten voit etsi\u00e4 ostoskorin sis\u00e4ll\u00f6st\u00e4 tietyn tuotetunnuksen ja lis\u00e4t\u00e4 maksun, jos se on ostoskorissa.<\/p>\n<p>K\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>WC()-&gt;cart-&gt;get_cart_contents()<\/code>palauttaa joukon kaikkia ostoskorissa olevia tuotteita. Voit joko kiert\u00e4\u00e4 t\u00e4m\u00e4n yksinkertaisella <code>foreach<\/code>silmukalla ja tarkistaa jokaisen tuotteen haluamaasi kuntoon, tai jos haluat vain tarkistaa tunnukset, voit poimia kaikki tuotetunnukset yhdelle riville seuraavasti:<\/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>Alla oleva esimerkki n\u00e4ytt\u00e4\u00e4, kuinka voit lis\u00e4t\u00e4 maksun riippuen siit\u00e4, ett\u00e4 ostoskori sis\u00e4lt\u00e4\u00e4 tietyn tunnuksen tuotteen:<\/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>Vastaavia toimintoja voi k\u00e4ytt\u00e4\u00e4 my\u00f6s m\u00e4\u00e4rien poimimiseen, jos joudut lis\u00e4\u00e4m\u00e4\u00e4n maksun, kun asiakas lis\u00e4\u00e4 todella suuren m\u00e4\u00e4r\u00e4n jotain.<\/p>\n<h2>Tiivistettyn\u00e4<\/h2>\n<p>T\u00e4m\u00e4 viesti on osoittanut sinulle, kuinka voit lis\u00e4t\u00e4 mukautetun maksun, ja viiden esimerkin kautta, kuinka lis\u00e4t\u00e4 maksu tietyist\u00e4 ehdoista. N\u00e4m\u00e4 olosuhteet olivat kaikki, mit\u00e4 olen kohdannut ja osasin ajatella, ja niiden pit\u00e4isi ainakin antaa vihjeit\u00e4 siit\u00e4, kuinka saada tietoa olosuhteiden muokkaamiseksi edelleen. Kerro minulle, toimivatko ne sinulle, tai jos olet l\u00f6yt\u00e4nyt toisen tilan, jota en tullut ajatelleeksi!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4m\u00e4 opas n\u00e4ytt\u00e4\u00e4, kuinka voit lis\u00e4t\u00e4 mukautetun maksun WooCommerce-ostoskorin loppusummaan ja lis\u00e4t\u00e4 sen my\u00f6s toimituspaikan tai maksutavan mukaan.<\/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":[895,719,719,895,813,1110,843,813,843,854,854,864,864],"tags":[1166],"class_list":["post-233586","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koodi","category-kehittaejae","category-laajennuksia","category-n-a","category-opetusohjelmia","category-woocommerce-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233586"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233586\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/224911"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}