✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Guide om hur du lägger till anpassade avgifter till WooCommerce Checkout med kod

52

Det finns vissa fall då du kan behöva lägga till en avgift till varukorgens totalsumma. Ibland bara om ett visst villkor är uppfyllt, till exempel beroende på varukorgens totalsumma eller fraktplats. Med WooCommerce är det ganska enkelt att lägga till en avgift – mycket enklare än att lägga till en rabatt faktiskt. I det här inlägget kommer vi att lära oss hur du lägger till en anpassad avgift till WooCommerce.

WooCommerce har en inbyggd funktion i varukorgsobjektet för att lägga till avgifter. Allt du behöver är att haka på rätt åtgärd och med det medföljande kundvagnsobjektet anropa en funktion för att lägga till en avgift. WooCommerce kommer automatiskt att visa avgifter i varukorgen och kassasumman. Du bestämmer avgiftens etikett och belopp.

Guide om hur du lägger till anpassade avgifter till WooCommerce Checkout med kod

Det är viktigt att notera att avgiftsbeloppet inte kan vara negativt – vilket ger kunden rabatt. Detta "hack" brukade fungera tidigare i äldre WooCommerce-versioner, men inte längre.

Låt oss gå in på detaljerna i koden! Den enda kroken du behöver bry dig om är woocommerce_cart_calculate_fees. Inuti denna krok kan du få tag på vagnsobjektet genom att ringa WC()->cart. Med det objektet kan du anropa add_fee()som accepterar fyra parametrar (du behöver förmodligen bara de två först); add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string). De två första är självförklarande. Den tredje parametern är en boolean som avgör om avgiften är skattepliktig eller inte. Och den fjärde är för att tillhandahålla en skatteklass för avgiften (om den tredje parametern är sann). Men det kan lämnas tomt för standardskatteklass.

Lägger till en fast avgift

Att lägga till en anpassad avgift görs i sin enklaste form så här:

Det första steget är att förhindra att en avgift läggs till om vi är i admin eller om Ajax pågår. Därefter ropar vi add_fee()på vagnsobjektet. Detta kommer att lägga till en avgift som heter "En liten avgift" med värdet 5. Värdet kommer att vara i vilken valuta du än har i din butik. Om butikens valuta är inställd på dollar blir den $5. Anpassa namn och mängd efter dina behov.

Lägga till en avgift i procent av totalsumman för varukorgen

Om du vill att avgiftsbeloppet ska vara en procentandel av totalsumman för varukorgen behöver du bara beräkna det annorlunda. Kom ihåg att vi alltid har tillgång till varukorgsobjektet genom att ringa WC()->cartoch därifrån kan vi hämta totalsummorna.

Ovanstående kod kommer att lägga till en avgift som uppgår till 5 % av varukorgens totala summa, vilket är varukorgens totala summa (get_cart_contents_total()) plus varukorgens fraktkostnad (get_shipping_total()). Justera kursen och vilka summor som ska inkluderas eller exkluderas i det du behöver.

Så det här är ganska trevligt, men i vissa fall kanske vi vill anpassa när vi ska lägga till en avgift. Kanske vill du lägga till en avgift endast för en viss fraktmetod, betalningsmetod eller baserat på varukorgens totala summa. Processen är densamma, vi lägger bara till avgiften endast om våra villkor är uppfyllda.

Lägger till en avgift beroende på varukorgsumman

Säg att du bara ville lägga till en avgift om varukorgsumman var under ett visst belopp. Anta att du vill lägga till en avgift för hantering av små belopp. Du kan göra så här:

Använd WC()->cart->get_cart_contents_total()för att få flottörnumret för den totala varukorgen, exklusive frakt. (Om du vill inkludera frakt också, titta ovan för att lägga till procentavgift för hur du får fraktsummor). Gör sedan dina jämförelser.

Du kan också vända den och bestämma dig för att lägga till en avgift om vagnen var över en viss gräns.

Lägger till en avgift beroende på leveransplats

Du kan också lägga till en avgift beroende på fraktort, till exempel per land. På samma sätt som att få kundvagnsobjekt kan vi använda WC()->customerför kundobjektet. Tänk på att när kunden inte är inloggad och ännu inte kommit till kassan och fyllt i sin adress kommer värdena på kundobjektet att vara tomma eller standardinställningarna inställda i din butik.

Du måste känna till landskoden – här är en bra landskodreferens. Här är ett exempel på att lägga till en avgift om kunden är från Norge.

Lägger till en avgift beroende på vald fraktmetod

Att få leveransmetoden är lite svårare eftersom det beror på användarens session och inte kommer i ett "trevligt begripligt format". Du kan få tag på det aktuella valda fraktsättet med WC()->session->get('chosen_shipping_methods'). Observera att det står "metoder" och inte "metod", så detta returnerar en array. Normalt innehåller arrayen ett element, där varje element består av strängar av frakt-ID, ett kolon och ett ID efter det. Jag rekommenderar att du använder PHP-strängmetoder för att kontrollera om strängen innehåller ID:t – till exempel strpos()– och inte om det är lika.

Lägger till en avgift beroende på vald betalningsmetod

Om du ville lägga till en avgift beroende på vilken betalningsgateway som valdes, kan du få tag på den aktuella valda betalningsgatewayen med WC()->session->get('chosen_payment_method')och göra en jämförelse med dess namn (t.ex. för Paypal skulle den återkomma 'paypal'). Men du kanske märker att när kunden växlar mellan betalningsgateways i kassan läggs avgiften inte till eller tas bort dynamiskt. Så du kommer att behöva lägga till lite extra Javascript för att säkerställa att WooCommerce uppdaterar varukorgen så att din avgift fungerar konsekvent.

För att lägga till Javascript vi hakar på woocommerce_review_order_before_paymentsom sker precis före betalningsrutan i kassan och matar ut inline-skript. Allt koden gör är att trigga WooCommerces hook update_checkoutnär valet av betalningsmetod ändras. Detta säkerställer att alla nödvändiga PHP-metoder och krokar körs (inklusive avgiftskroken) varje gång varukorgen uppdateras.

Lägger till en avgift beroende på vilka produkter som finns i varukorgen

Jag kommer att nämna det tidigare, men jag nämner det igen: Du har full tillgång till kundvagnsobjektet med WC()->cart, så du kan söka i varukorgens innehåll efter ett specifikt produkt-ID och lägga till en avgift om det finns i varukorgen.

Genom att använda WC()->cart->get_cart_contents()returnerar en mängd av alla produkter i kundvagnen. Du kan antingen gå igenom detta med en enkel foreachslinga och kontrollera varje produkt till önskat skick, eller om du helt enkelt vill leta efter ID kan du extrahera alla produkt-ID på en rad så här:

Exemplet nedan visar hur du kan lägga till en avgift beroende på att varukorgen innehåller en produkt med ett visst ID:

Du kan också använda liknande operationer för att extrahera kvantiteter om du behöver lägga till en avgift när en kund lägger till en riktigt stor mängd av något.

Sammanfattningsvis

Det här inlägget har visat dig hur du lägger till en anpassad avgift, och genom fem exempel hur du lägger till en avgift beroende på vissa villkor. Dessa förhållanden var allt jag har stött på och kunde komma på, och de borde åtminstone ge tips om hur man får tag på information för att ytterligare anpassa dina villkor. Låt mig veta om de fungerade för dig, eller om du har hittat ett annat tillstånd som jag inte tänkt på!

Inspelningskälla: awhitepixel.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer