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

Hur man programiskt lägger till en anpassad rabatt till WooCommerce Checkout

165

I det här inlägget kommer vi att titta på hur vi lägger till rabatter programmässigt och automatiskt. För att göra detta använder vi WooCommerces kupongfunktion men vi gör det automatiskt och vi döljer det faktum att det är en kupong till kunderna. Jag har försökt att hålla koden så generell som möjligt då villkoren för att tillämpa rabatter kan variera mycket för alla som läser detta.

Varför kuponger är sättet att göra det

I äldre versioner av WooCommerce hade vi några ("hackiska") alternativ för att lägga till rabatter med kod, till exempel att ge ett negativt nummer till add_fee()eller arbeta med get_discounted_price(). Tyvärr fungerar dessa metoder inte längre eller anses vara äldre och kommer att tas bort i senare versioner. Det strukturellt bra sättet att lägga till rabatter är att använda den inbyggda kupongfunktionen i WooCommerce.

Emellertid kan en kupong i allmänhet inte appliceras automatiskt på en kundvagn. Det kräver att kunden manuellt skriver in en kupongkod som hon eller han måste ha fått. I vissa webbutiker vill man bara att en rabatt tillämpas automatiskt när ett visst villkor är uppfyllt utan att kunden behöver göra något. Det är vad vi fixar med kod.

Anpassade rabatter med kuponger

Du måste skapa en kupong med en kod och ställa in den med de parametrar du önskar. Du kommer att kunna tillämpa den, ta bort den och ändra olika utdata varhelst kupongen är synlig för kunden. Eventuellt, om du faktiskt inte vill ha kuponger tillgängliga för kunder i din webbshop, kommer vi att titta på några enkla knep för att dölja alternativen för att manuellt ange kupongkoder.

I kodexemplet nedan grupperar jag all relaterad kod i en PHP-klass. Detta hjälper till för en renare kod men är särskilt användbart eftersom vi vill hänvisa till kupongkoden flera gånger. Att definiera den som en klassvariabel är bättre än att upprepa den i flera funktioner.

Skapa din rabatt som en kupong

Det första steget är att skapa kupongen som kommer att vara "platshållaren" för din rabatt. Det enklaste är helt enkelt att skapa en i WooCommerce admin (WooCommerce > Kuponger > Lägg till kupong).

Om du vill skapa kupongen programmässigt är en kupong faktiskt ett inlägg du kan skapa med wp_insert_post()– men du måste vara noga med att skapa ditt kuponginlägg bara en gång. WooCommerce har en kort guide i hur man programmässigt skapar en kupong.

Ange en unik slug som din kupongkod och ställ in som ett minimum rabattbeloppet (antingen en procentsats eller fast avgift). När det gäller kodexemplet nedan har jag skapat en kupongkod ‘ example‘ (jag rekommenderar dock att du använder ett mer kreativt och passande namn för ditt).

Skapar PHP-klassen som kommer att innehålla all vår kod

Låt oss äntligen komma till kodningen! Du kan definiera den här klassen direkt i ditt temas functions.php, plugin-kod eller en medföljande separat fil.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Namnge din klass vad du vill och ersätt klassvariabeln $coupon_codemed vad du än kallade din kupong. Glöm inte att initialisera klassen efter i slutet (new AWPCustomDiscount()).

Om du har programmerat objektorienterat tidigare bör detta vara bekant för dig. Om inte, oroa dig inte, detta bör vara enkelt att följa. Vi lägger till några funktioner här och hänvisar till kupongkoden med $this->coupon_code. Låt oss börja med koden som är ansvarig för att faktiskt lägga till kupongen när villkoren är uppfyllda.

Applicera kupong programmässigt

Av erfarenhet har jag lärt mig att anslutning av koden för att applicera och ta bort kuponger fungerar bäst och mest konsekvent med följande två krokar; en för vagnen (woocommerce_before_cart) och en för kassan (woocommerce_before_checkout_form).

Inuti funktionen behöver vi bara kolla efter de villkor vi vill ha. WooCommerce erbjuder funktioner för att få tag på varukorgsobjektet with WC()->cartsom vi kan använda för att få all information vi behöver om varukorgen såsom dess artiklar och totaler. Som ett exempel kommer koden nedan att tillämpa en rabatt om varukorgens totala summa (exklusive eventuella rabatter) är över ett visst belopp.

Vi bör också se till att om villkoren inte är uppfyllda bör vi ta bort rabatten om den tidigare lagts till. Föreställ dig i vårt exempel att kunden överskred maxbeloppet, men sedan gick till kundvagnen, tog bort några varor och därmed kom tillbaka under det krävda beloppet. Eftersom kuponger inte tillämpas automatiskt måste alla applicerade kuponger också tas bort programmässigt.

Använder sig avapply_coupon

Kuponger läggs till i kundvagnsobjektet med apply_coupon()kupongkoden som parameter, och de tas bort från kundvagnsobjektet remove_coupon()med kupongkoden som parameter. Enkelt nog. Vi kan också använda funktionen så pass passande get_applied_coupons()i kundvagnsobjektet för att kontrollera om vår kupong redan har använts.

Om du inte är bekant med att använda objektorienterad PHP i WordPress; här är en snabb sammanfattning av hur ovanstående fungerar: __construct()Funktionen körs när klassen initieras, vilket vi gör direkt efter klassen. Inuti __construct()lägger du vanligtvis alla krokar som du normalt skulle göra, till exempel inuti functions.php. För att WordPress ska hitta våra funktioner i vår klass måste vi tala om för kroken att referera till en funktion definierad i en array bestående av $this(klassobjektet) och funktionsnamnet.

Inne i funktionen addDiscount()programmerar vi in ​​våra villkor. I exemplet ovan hämtar jag vagnens totala värde med WC()->cart->get_subtotal()och jämför den med mina förhållanden – över 500.

Obs: Om du behöver hämta och jämföra varukorgsummor, var medveten om att de flesta av totalsummorna är inkluderade kuponger. Till exempel kommer de mer bekanta WC()->cart->get_cart_contents_total()att returnera summan före leverans men inkluderade rabatter; vilket innebär att om din rabatt har tillämpats tidigare kommer denna summa att vara fel att jämföra med.

Du kan ringa apply_coupon()utan att kontrollera om kupongen redan har tillämpats (ifkontrollen på rad #14), eftersom funktionen apply_coupon()själv ser till att inte lägga till den igen om den användes tidigare. Men denna if-kontroll förhindrar att kunden får ett felmeddelande som säger "Kupongen har redan tillämpats" varje gång varukorgen uppdateras.

Så här kommer din rabatt att se ut i varukorgsummor i varukorg och kassa:

Hur man programiskt lägger till en anpassad rabatt till WooCommerce Checkout

Dina villkor för rabatt

Villkoren för din kupong beror helt på dig och dina behov. Jag har satt upp några exempel på villkor för att lägga till en anpassad avgift i ett tidigare inlägg – till exempel beroende på leveransplats eller vilka produkter som ligger i kundvagnen. Du kan även jämföra dagens datum om du ville ge en speciell jul- eller halloweenrabatt, eller ge rabatt baserat på villkor hos den inloggade kunden.

Om du hellre vill använda kupongen beroende på inställningar du har gjort på själva kupongen – till exempel utesluta eller inkludera vissa produkt-ID:n, kan du också göra det. Du kan instansiera ett objekt av kupongen från kupongkoden, så här:

Med det kupongobjektet har du tillgång till alla funktioner för att hämta alla inställningar du har ställt in på kupongen. Till exempel att få tag på produkt-ID:n som måste inkluderas för kupongen:

Se dokumentationen för klassen WC_Coupon för att se hur du kan få tag i det du behöver.

Fixa kupongens synliga etikett

Kupongen bör nu läggas till och tas bort när din kundvagn uppfyller eller inte uppfyller dina villkor som anges i addDiscount(). Men i totaltabellen i både varukorgen och i kassan visas rabatten som "Kupong: exempel" (eller vad din kupongkod nu är). Det är inte bra! Lyckligtvis är det lätt att ändra denna etikett med hjälp av filtret woocommerce_cart_totals_coupon_label. Vi lägger till filtret i vår __construct()och definierar en funktion:

Med filtret får vi tillgång till kupongobjektet som andra parameter. Med kupongobjektet kan vi kontrollera dess egenskap, code, oavsett om det stämmer överens med vår anpassade kupongkod. I så fall returnerar vi vilken etikett vi vill. Justera etikettutmatningen till vad du vill. Annars returnerar vi standardkupongetiketten.

Ta bort användaralternativet för att ta bort rabatten

En annan sak som du kanske har lagt märke till i visningen av vår rabatt i varukorg och kassa är att den fick en länk "[Ta bort]" efter beloppet. Detta är standardbeteende för kuponger i WooCommerce, men för vårt fall inte önskvärt. Både för att det kan förvirra kunderna och för att vår kod skulle tillämpa den igen efter borttagning.

WooCommerce tillhandahåller filtret woocommerce_cart_totals_coupon_htmlför utmatningen av beloppet. Lyckligtvis tillhandahåller WooCommerce HTML-utdata av endast beloppet självt som tredje parameter till detta filter. Vi kan helt enkelt returnera detta istället för att se till att vår rabatt presenteras korrekt med valuta och allt.

Valfritt: Döljer kupongfunktionen för kunder

Kuponger måste aktiveras i WooCommerce för att vår rabattfunktionalitet ska fungera, men var medveten om att detta kommer att lägga till möjligheten för kunder att manuellt ange kupongkoder i både varukorg och kassa. Om du inte vill visa att din webbshop har kupongfunktionalitet, och särskilt inte tillåta kunder att manuellt ange kupongkoder, kan du också göra det.

Tar bort den från kassan

Att ta bort kupongfunktionen från kassan är enkelt och kan göras inom vår klass. Vi tar helt enkelt bort kroken som gör kupongen "låda", som så:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Tar bort den från vagnen

Att ta bort kupongkodsfunktionen i varukorgen är tyvärr inte lika lätt då detta är hårdkodat i en mall. Du måste åsidosätta WooCommerces kundvagnsmall för att ta bort kupongfunktionen. Kopiera filen pluginswoocommercetemplatescartcart.phptill your-themewoocommercecartcart.php.

WooCommerces mallfiler förändras ständigt så att ge dig ett exakt radnummer skulle inte hjälpa. Men du hittar koden som matar ut ingången och knappen för kupong nära botten av filen; ser ut ungefär så här:

Vad du behöver göra är att kommentera den kupongrelaterade produktionen. Jag rekommenderar att du lägger till en PHP-kommentar med /*precis före if-check och stänger den med */direkt efter den avslutande parentesen. Såhär:

Vid det här laget bör din webbshops kupongfunktionalitet vara praktiskt taget dold för kunderna! Men din anpassade rabatt borde fungera perfekt.

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