✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas programmiliselt WooCommerce Checkouti kohandatud allahindlust lisada

74

Selles postituses vaatleme, kuidas lisame allahindlusi programmiliselt ja automaatselt. Selleks kasutame WooCommerce’i kupongifunktsiooni, kuid muudame selle automaatseks ja varjame klientide ees, et see on kupong. Olen püüdnud koodi hoida võimalikult üldisena, kuna allahindluste kohaldamise tingimused võivad seda lugeva inimese jaoks palju erineda.

Miks kupongid on viis seda teha?

WooCommerce’i vanemates versioonides oli meil koodiga allahindluste lisamiseks mõned ("häkilised") võimalused, näiteks negatiivse numbri andmine add_fee()või töötamine get_discounted_price(). Kahjuks need meetodid enam ei tööta või neid peetakse pärandiks ja hilisemates versioonides eemaldatakse. Struktuuriliselt hea viis allahindluste lisamiseks on kasutada WooCommerce’i sisseehitatud kupongifunktsiooni.

Tavaliselt ei saa kupongi ostukorvi automaatselt rakendada. See nõuab, et klient sisestaks käsitsi kupongikoodi, mis talle peab olema antud. Mõnes veebipoes soovitakse lihtsalt, et soodustus rakenduks automaatselt, kui teatud tingimus on täidetud, ilma et klient peaks midagi tegema. Selle parandame koodi abil.

Kohandatud allahindlused kupongidega

Peate looma koodiga kupongi ja seadistama selle soovitud parameetritega. Saate seda rakendada, eemaldada ja erinevaid väljundeid muuta kõikjal, kus kupong on kliendile nähtav. Valikuliselt, kui te ei soovi, et teie veebipoes oleks klientidele kupongid saadaval, vaatame mõned lihtsad nipid kupongikoodide käsitsi sisestamise võimaluste peitmiseks.

Allolevas koodinäites rühmitan kogu seotud koodi PHP klassi. See aitab puhtama koodi jaoks, kuid on eriti kasulik, kuna tahame kupongikoodile mitu korda viidata. Selle määratlemine klassimuutujana on parem kui selle kordamine mitmes funktsioonis.

Looge oma allahindlus kupongina

Esimene samm on kupongi loomine, mis on teie allahindluse "kohahoidja". Lihtsaim on selle loomine WooCommerce’i administraatoris (WooCommerce > Kupongid > Lisa kupong).

Kui soovite kupongi programmiliselt luua, on kupong tegelikult postitus, millega saate luua, wp_insert_post()kuid peate hoolitsema selle eest, et kupongipostitus luuakse ainult üks kord. WooCommerce’il on lühike juhend kupongi programmiliseks loomiseks.

Esitage oma kupongikoodina unikaalne nälkjas ja määrake vähemalt allahindluse summa (kas protsent või fikseeritud tasu). Mis puudutab allolevat koodinäidet, siis olen loonud kupongikoodi " example" (soovitan siiski kasutada loomingulisemat ja sobivamat nime).

PHP klassi loomine, mis sisaldab kogu meie koodi

Asume lõpuks kodeerimise juurde! Saate selle klassi määratleda otse oma teema functions.php, pistikprogrammi koodis või kaasasolevas eraldi failis.

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

Andke oma klassile nimi mis tahes, mida soovite, ja asendage klassi muutuja $coupon_codeselle nimega, mille kupongile panite. Ärge unustage klassi pärast lõpus (new AWPCustomDiscount()) lähtestada.

Kui olete objektorienteeritud varem programmeerinud, peaks see olema teile tuttav. Kui ei, siis ärge muretsege, seda peaks olema lihtne järgida. Lisame siia mõned funktsioonid ja viitame kupongi koodile $this->coupon_code. Alustame koodiga, mis vastutab kupongi lisamise eest, kui tingimused on täidetud.

Kupongi programmiline rakendamine

Kogemuste põhjal olen õppinud, et kupongide rakendamise ja eemaldamise koodi haakimine toimib kõige paremini ja järjepidevamalt järgmiste kahe konksu abil; üks ostukorvi (woocommerce_before_cart) ja üks kassasse (woocommerce_before_checkout_form).

Funktsiooni sees peame vaid kontrollima soovitud tingimusi. WooCommerce pakub funktsioone, et hankida ostukorvi objekti, with WC()->cartmida saame kasutada kogu vajaliku teabe hankimiseks ostukorvi kohta, näiteks selle kaubad ja kogusummad. Näiteks rakendab allolev kood allahindlust, kui ostukorvi kogusumma (ilma allahindlusteta) ületab teatud summa.

Samuti peaksime tagama, et kui tingimused ei ole täidetud, eemaldame allahindluse, kui see on varem lisatud. Meie näites kujutage ette, et klient ületas maksimumsumma, kuid läks siis ostukorvi, eemaldas mõned kaubad ja jäi seega alla nõutava summa. Kuna kuponge ei rakendata automaatselt, tuleb ka kõik rakendatud kupongid programmiliselt eemaldada.

Kasutadesapply_coupon

Kupongid lisatakse ostukorvi objektile apply_coupon()parameetrina kupongi koodi andmisega ja eemaldatakse ostukorvi objektilt remove_coupon()kupongi koodiga parameetrina. Piisavalt lihtne. Samuti saame kasutada ostukorvi objektis nii tabavalt nimetatud funktsiooni, get_applied_coupons()et kontrollida, kas meie kupong on juba rakendatud.

Kui te ei tunne WordPressis objektorienteeritud PHP kasutamist; Siin on kiire kokkuvõte selle kohta, kuidas ülaltoodud toimib: __construct()Funktsioon töötab alati, kui klass on lähtestatud, mida me teeme kohe pärast klassi. Sisse __construct()lisate tavaliselt kõik konksud nagu tavaliselt, näiteks sees functions.php. Selleks, et WordPress leiaks meie klassist meie funktsioonid, peame konksule ütlema, et see viitaks funktsioonile, mis on määratletud massiivis, mis koosneb $this(klassi objektist) ja funktsiooni nimest.

Funktsiooni sees, mida addDiscount()me oma tingimustes programmeerime. Ülaltoodud näites vaatan vankri kogukasutusse WC()->cart->get_subtotal()ja võrdlen seda minu tingimustega – üle 500.

Märkus. Kui teil on vaja hankida ja võrrelda ostukorvi kogusummasid, pidage meeles, et enamik kogusummadest on kaasatud kupongid. Näiteks WC()->cart->get_cart_contents_total()tagastab tuttavam kogusumma enne saatmist, kuid sisaldab allahindlusi; mis tähendab, et kui teie allahindlust on varem rakendatud, on seda kogusummat võrrelda vale.

Saate helistada apply_coupon()ilma, et kontrolliksite, kas kupong on juba rakendatud (ifkontroll real #14), sest funktsioon apply_coupon()ise tagab, et see ei lisa seda uuesti, kui see oli varem rakendatud. Kuid see if-kontroll hoiab ära selle, et klient ei saaks iga kord, kui ostukorvi uuendatakse, veateadet “Kupong on juba rakendatud".

Nii kuvatakse teie allahindlus ostukorvi kogusummas ostukorvis ja kassas:

Kuidas programmiliselt WooCommerce Checkouti kohandatud allahindlust lisada

Teie allahindluse tingimused

Teie kupongi tingimused sõltuvad täielikult teist ja teie vajadustest. Olen varasemas postituses seadnud mõned näidistingimused kohandatud tasu lisamiseks – näiteks olenevalt saatmiskohast või ostukorvis olevatest toodetest. Võrrelda saab ka tänast kuupäeva, kui soovisite teha jõulude või halloweeni erisoodustust või teha sisselogitud kliendi juures tingimuste alusel soodustust.

Kui soovite pigem kupongi rakendada sõltuvalt kupongil enda määratud seadetest – näiteks välistada või kaasata teatud toote ID-d, saate seda ka teha. Saate kupongi koodist luua kupongi objekti järgmiselt:

Selle kupongiobjektiga on teil juurdepääs kõikidele funktsioonidele, mille abil saate kupongile seatud seadeid tuua. Näiteks toote ID-de hankimine, mis peavad olema kupongis kaasas.

Vaadake klassi WC_Coupon dokumentatsiooni, et näha, kuidas saate vajaliku kätte.

Parandage kupongi nähtav silt

Kupong tuleks praeguseks lisada ja eemaldada, kui teie ostukorv vastab või ei vasta punktis sätestatud tingimustele addDiscount(). Kuid nii ostukorvis kui ka kassas olevas summade tabelis kuvatakse allahindlus kujul "Kupong: näide" (või mis iganes teie kupongi kood on). See ei ole hea! Õnneks on seda silti filtri abil lihtne muuta woocommerce_cart_totals_coupon_label. Lisame oma filtrile filtri __construct()ja määratleme funktsiooni:

Filtri abil saame teise parameetrina juurdepääsu kupongiobjektile. Kupongiobjekti abil saame kontrollida selle omadust, codeolenemata sellest, kas see vastab meie kohandatud kupongikoodile või mitte. Kui jah, tagastame soovitud sildi. Reguleerige sildiväljundit vastavalt sellele, mida soovite. Vastasel juhul tagastame kupongi vaikesildi.

Eemaldage allahindluse eemaldamiseks kasutaja valik

Teine asi, mida võisite märgata meie allahindluse kuvamisel ostukorvis ja kassas, on see, et selle summa järel on link "[Eemalda]". See on WooCommerce’i kupongide vaikekäitumine, kuid meie puhul pole see soovitav. Nii sellepärast, et see võib kliente segadusse ajada, kui ka seetõttu, et meie kood rakendaks selle pärast eemaldamist uuesti.

WooCommerce pakub filtri woocommerce_cart_totals_coupon_htmlsumma väljundi jaoks. Õnneks pakub WooCommerce selle filtri kolmanda parameetrina ainult summa enda HTML-väljundit. Saame selle lihtsalt tagastada, selle asemel, et tagada, et meie allahindlus on koos valuuta ja kõigega õigesti esitatud.

Valikuline: kupongi funktsioonide peitmine klientide eest

Meie allahindlusfunktsioonide toimimiseks peavad kupongid olema WooCommerce’is aktiveeritud, kuid pidage meeles, et see lisab klientidele võimaluse sisestada käsitsi kupongikoode nii ostukorvi kui ka kassasse. Kui te ei soovi näidata, et teie veebipoel on kupongifunktsioon, ja eriti keelata klientidel kupongikoode käsitsi sisestada, saate seda ka teha.

Kassast eemaldamine

Kupongi funktsioonide eemaldamine kassast on lihtne ja seda saab teha meie klassis. Me lihtsalt eemaldame konksu, mis muudab kupongi "kasti", näiteks järgmiselt:

... 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); } ...

Selle eemaldamine ostukorvist

Kupongikoodi funktsiooni eemaldamine ostukorvist ei ole kahjuks nii lihtne, kui see on mallis sisse kirjutatud. Kupongi funktsiooni eemaldamiseks peate alistama WooCommerce’i ostukorvi malli. Kopeerige fail pluginswoocommercetemplatescartcart.phpkausta your-themewoocommercecartcart.php.

WooCommerce’i mallifailid muutuvad pidevalt, nii et täpse reanumbri andmine ei aitaks. Kuid koodi, mis väljastab kupongi sisendi ja nupu, leiate faili allservast; näeb välja umbes selline:

Mida peate tegema, on kupongiga seotud väljund kommenteerida. Soovitan lisada PHP-kommentaari /*vahetult enne if-kontrolli ja sulgeda see */kohe sulgemissulu järel. Nagu nii:

Siinkohal peaks teie veebipoe kupongifunktsioonid olema klientide jaoks praktiliselt peidetud! Kuid teie kohandatud allahindlus peaks töötama suurepäraselt.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem