Visa inte priser med 0 decimaler i WooCommerce

I de generella inställningarna för WooCommerce finns det ett stycke som heter Valutainställningar. Här anger du vilken valuta din butik ska ha, på vilket vis valutasymbolen ska visas men också hur många decimaler du vill att dina priser i butiken ska visa med.

Vid en första anblick verkar inställningen för antalet decimaler endast vara en visningsinställning. En inställning som snyggar till hur priserna i butiken presenteras. Men att sätta antalet decimaler till 0 kan skapa problem för dig och din butik.

WooCommerce avrundar priser

När man sätter antalet decimaler till 0 börjar WooCommerce avrunda produktpriserna. Eller för att vara lite mer specifik – förhållandet mellan nettopriset och momsen. Om du då använder dig av en betalmodul som skickar med varje enskild orderrad till betalhanteraren, eller har en koppling till ett affärssystem, då kan beräkningen av orderbeloppet skilja sig mellan systemen.

Varför räknar inte modulerna som WooCommerce?

Man kan ju tycka att det borde vara upp till oss modulutvecklare att lösa ett sådant problem så att de siffror som WooCommerce presenterar i en order skickas över till ett affärssystem eller en betalhanterare.

Problemet är dock att när priset på en produkt avrundas och sparas på detta sätt i en order i WooCommerce, då kan det i vissa fall vara svårt att återskapa samma avrundning i ett annat system. Låt mig ge ett exempel.

Dags för lite matte

En produkt kostar 49 kr inklusive 25% moms. Det innebär att nettopriset är 39,20 kr och momsen är 9,80 kr. Om man sätter valutainställningarna till 0 decimaler kommer WooCommerce att avrunda detta pris till 39 kr netto och 10 kr moms.

Om vi nu tänker att vi har en betalhanterare som vill att vi skickar in priset exklusive moms samt momsprocentsatsen (för varje enskild orderrad), då innebär det att vi skickar över 39 kr samt 25%. Om man räknar på detta så blir priset inklusive moms 48,75 kr.

I de fall där varje orderrad skickas in till betalhanteraren (obligatoriskt vid fakturaköp) brukar även den totala ordersumman skickas med. När summeringen av orderraderna jämförs med totalsumman som har skickats in från WooCommerce, då stämmer inte dessa två summor. Vanligtvis svarar betalhanteraren då med ett felmeddelande och köpet kan inte genomföras.

Flera exemplar per orderrad och rabattkuponger

I vissa fall fungerar det att hantera den här typen av avrundning i betalmodulen och hos betalhanteraren. Då kan det istället uppstå problem när kunden köper ett antal exemplar av en produkt. Betalhanterarna brukar vilja ha enhetspriset samt det antal produkter varje orderrad avser. WooCommerce gör dock sin avrundning på summan av hela orderraden. Ett annat scenario som kan orsaka liknande problem är vid användande av rabattkuponger.

Jag vill ändå inte visa decimaler i min butik – hur gör jag?

Som tur är finns det ett sätt att undvika visning av decimaler i WooCommerce så länge det rör sig om priser med heltal. Ställ antalet decimaler till 2 i valutainställningarna och använd därefter följande kodsnippet i ditt temas functions.php eller i ett separat plugin.

/**
 * Trim zeros in price decimals
 **/
 add_filter( 'woocommerce_price_trim_zeros', '__return_true' );

Med ovanstående kod innebär det att 49,00 kr visas som 49 kr. Om du har inställt så butiken ska visa priser inklusive moms kommer endast momsen att behöva visas med decimaler. Alla andra priser blir med heltal. En mer korrekt beräkning av priser och moms din butik där du slipper att visa onödiga decimaler.

Helt enkelt a win-win situation 🙂

Posted on

5 thoughts on “Visa inte priser med 0 decimaler i WooCommerce

  1. Hei Niklas!

    Dette er en genial work-around. Hos eg gir det likevel bare effekt på mini-cart, ikke på product-categories eller single product. Har du noen idé om hvorfor?

    Mvh,
    André Giæver
    Human Web/Nettpilot

    1. Hej André, tack för kommentaren!
      Om det bara blir ändringar på vissa ställen så kan det bero på det tema du använder (om det använder egna template-filer för WooCommerce). Du skulle kunna testa att tillfälligt växla till WooThemes eget (gratis)tema Storefront och se om det blir någon skillnad.

  2. Hej!

    Kanon! Skulle vart gött med en CSS-kod också 🙂 Då slipper man ändra varje gång temat eller Woocommerce uppdaterar functions.php

    Är det något som kan uppdateras i artikeln så hade det vart kanon! Tack på förhand

    1. Halloj Jens, eftersom det rör sig om en filter-hook som ändrar hur priset visas så ska det inte behövas någon css-ändring för att få det att fungera. Om du inte vill lägga in koden i ditt temas functions.php-fil eftersom det kan bli överskrivet när du uppdaterar temat så kan jag exempelvis rekommendera det här pluginet för att lägga till mindre kodändringar av det här slaget: https://wordpress.org/plugins/code-snippets/

Comments are closed.