✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak programowo dodać niestandardową zniżkę do kasy WooCommerce

15

W tym poście przyjrzymy się, jak programowo i automatycznie dodajemy rabaty. W tym celu wykorzystujemy funkcję kuponową WooCommerce, ale robimy to automatycznie i ukrywamy fakt, że jest to kupon dla klientów. Starałem się, aby kod był jak najbardziej ogólny, ponieważ warunki stosowania zniżek mogą się bardzo różnić dla każdego, kto to czyta.

Dlaczego kupony są sposobem na to?

W starszych wersjach WooCommerce mieliśmy kilka („hackowych") opcji dodawania rabatów z kodem, na przykład podanie ujemnej liczby add_fee()lub działanie z get_discounted_price(). Niestety te metody już nie działają lub są uważane za starsze i zostaną usunięte w późniejszych wersjach. Strukturalnie dobrym sposobem dodawania rabatów jest korzystanie z wbudowanej funkcji kuponów w WooCommerce.

Jednak generalnie nie można automatycznie zastosować kuponu do koszyka. Wymaga od klienta ręcznego wpisania kodu kuponu, który musiał otrzymać. W niektórych sklepach internetowych po prostu chcesz, aby zniżka była stosowana automatycznie po spełnieniu określonego warunku, bez konieczności wykonywania jakichkolwiek czynności przez klienta. To naprawimy za pomocą kodu.

Niestandardowe rabaty z kuponami

Będziesz musiał stworzyć kupon z kodem i skonfigurować go z żądanymi parametrami. Będziesz mógł go zastosować, usunąć i zmienić różne wyniki wszędzie tam, gdzie kupon jest widoczny dla klienta. Opcjonalnie, jeśli nie chcesz, aby kupony były dostępne dla klientów w Twoim sklepie internetowym, przyjrzymy się kilku prostym sztuczkom ukrywającym opcje ręcznego wprowadzania kodów kuponów.

W poniższym przykładzie kodu grupuję cały powiązany kod w klasę PHP. Pomaga to w czystszym kodzie, ale jest szczególnie przydatne, ponieważ chcemy odwoływać się do kodu kuponu kilka razy. Zdefiniowanie jej jako zmiennej klasy jest lepsze niż powtarzanie jej w wielu funkcjach.

Utwórz zniżkę jako kupon

Pierwszym krokiem jest stworzenie kuponu, który będzie „zastępczym” dla Twojego rabatu. Najłatwiej jest po prostu utworzyć taki w admin WooCommerce (WooCommerce > Kupony > Dodaj kupon).

Jeśli chcesz utworzyć kupon programowo, kupon jest w rzeczywistości postem, za pomocą którego możesz utworzyć wp_insert_post()– ale musisz uważać, aby utworzyć post z kuponem tylko raz. WooCommerce ma krótki przewodnik, jak programowo utworzyć kupon.

Podaj unikalny slug jako kod kuponu i jako minimum ustaw kwotę rabatu (procentową lub stałą opłatę). Jeśli chodzi o poniższy przykład kodu, utworzyłem kod kuponu „ example” (zalecam jednak użycie bardziej kreatywnej i dopasowanej nazwy dla Twojej).

Tworzenie klasy PHP, która będzie zawierała cały nasz kod

Przejdźmy wreszcie do kodowania! Możesz zdefiniować tę klasę bezpośrednio w motywie functions.php, kodzie wtyczki lub dołączonym oddzielnym pliku.

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

Nazwij swoją klasę, jak chcesz, i zastąp zmienną klasy $coupon_codedowolną nazwą kuponu. Nie zapomnij zainicjować klasy na końcu (new AWPCustomDiscount()).

Jeśli wcześniej programowałeś zorientowane obiektowo, powinno to być ci znajome. Jeśli nie, nie martw się, to powinno być łatwe do naśladowania. Dodamy tutaj kilka funkcji i odwołamy się do kodu kuponu za pomocą $this->coupon_code. Zacznijmy od kodu odpowiedzialnego za faktyczne dodanie kuponu po spełnieniu warunków.

Programowe stosowanie kuponu

Z doświadczenia nauczyłem się, że podpięcie kodu do stosowania i usuwania kuponów działa najlepiej i najbardziej konsekwentnie przy użyciu następujących dwóch podpięć; jeden do koszyka (woocommerce_before_cart) i jeden do kasy (woocommerce_before_checkout_form).

Wewnątrz funkcji wszystko, co musimy zrobić, to sprawdzić warunki, które chcemy. WooCommerce oferuje funkcje umożliwiające uzyskanie obiektu koszyka, with WC()->cartktórych możemy użyć, aby uzyskać wszystkie potrzebne nam informacje o koszyku, takie jak jego pozycje i sumy. Na przykład poniższy kod zastosuje zniżkę, jeśli suma koszyka (z wyłączeniem wszelkich zniżek) przekroczy określoną kwotę.

Powinniśmy również upewnić się, że jeśli warunki nie są spełnione, należy usunąć rabat, jeśli został wcześniej dodany. W naszym przykładzie wyobraźmy sobie, że klient przekroczył maksymalną kwotę, ale potem poszedł do koszyka, usunął niektóre przedmioty i tym samym wrócił poniżej wymaganej kwoty. Ponieważ kupony nie są stosowane automatycznie, wszystkie zastosowane kupony również muszą zostać programowo usunięte.

Za pomocąapply_coupon

Kupony są dodawane do obiektu koszyka apply_coupon()podając jako parametr kod kuponu, a usuwane są z obiektu koszyka z remove_coupon()parametrem kod kuponu. Wystarczająco proste. Możemy również skorzystać z funkcji tak trafnie nazwanej get_applied_coupons()w obiekcie koszyka, aby sprawdzić, czy nasz kupon został już wykorzystany.

Jeśli nie wiesz, jak używać zorientowanego obiektowo PHP w WordPressie; Oto krótkie podsumowanie tego, jak powyższe działa: __construct()Funkcja będzie działać zawsze, gdy klasa zostanie zainicjowana, co robimy zaraz po klasie. Wewnątrz __construct()zazwyczaj dodajesz wszystkie haki, tak jak zwykle, na przykład w środku functions.php. Aby WordPress mógł znaleźć nasze funkcje w naszej klasie, musimy powiedzieć hakowi, aby odwoływał się do funkcji zdefiniowanej w tablicy składającej się z $this(obiektu klasy) i nazwy funkcji.

Wewnątrz funkcji addDiscount()programujemy w naszych warunkach. W powyższym przykładzie pobieram sumę użycia koszyka WC()->cart->get_subtotal()i porównuję go z moimi warunkami – powyżej 500.

Uwaga: Jeśli chcesz pobrać i porównać sumy koszyka, pamiętaj, że większość sum to kupony. Na przykład bardziej znajomy WC()->cart->get_cart_contents_total()zwróci sumę przed wysyłką, ale zawiera rabaty; co oznacza, że ​​jeśli Twoja zniżka została wcześniej zastosowana, ta suma będzie błędna w porównaniu.

Możesz zadzwonić apply_coupon()bez sprawdzania, czy kupon został już zastosowany (ifsprawdzenie w linii 14), ponieważ funkcja apply_coupon()sama upewni się, że nie doda go ponownie, jeśli został wcześniej zastosowany. Jednak ta ifkontrola zapobiega wyświetlaniu przez klienta komunikatu o błędzie „Kupon został już zastosowany” za każdym razem, gdy koszyk jest aktualizowany.

W ten sposób Twoja zniżka pojawi się w sumach koszyka w koszyku i kasie:

Jak programowo dodać niestandardową zniżkę do kasy WooCommerce

Twoje warunki zniżki

Warunki otrzymania kuponu zależą wyłącznie od Ciebie i Twoich potrzeb. We wcześniejszym poście ustawiłem kilka przykładowych warunków dodania niestandardowej opłaty – na przykład w zależności od miejsca wysyłki lub tego, które produkty są w koszyku. Możesz również porównać dzisiejszą datę, jeśli chcesz dać specjalną zniżkę świąteczną lub halloweenową lub dać zniżkę na podstawie warunków u zalogowanego klienta.

Jeśli wolisz zastosować kupon w zależności od ustawień, które ustawiłeś na samym kuponie – na przykład wykluczyć lub uwzględnić określone identyfikatory produktów, możesz to zrobić również. Możesz utworzyć instancję kuponu z kodu kuponu, na przykład:

Dzięki temu obiektowi kuponu masz dostęp do wszystkich funkcji pobierania dowolnych ustawień ustawionych na kuponie. Na przykład uzyskanie identyfikatorów produktów, które należy dołączyć do kuponu:

Zapoznaj się z dokumentacją klasy WC_Coupon, aby dowiedzieć się, jak zdobyć to, czego potrzebujesz.

Napraw widoczną etykietę kuponu

Kupon powinien już zostać dodany i usunięty, gdy Twój koszyk spełnia lub nie spełnia warunków określonych w addDiscount(). Jednak w tabeli sum w koszyku i kasie rabat jest wyświetlany jako „Kupon: przykład” (lub inny kod kuponu). To nie jest dobrze! Na szczęście łatwo zmienić tę etykietę za pomocą filtra woocommerce_cart_totals_coupon_label. Dodamy filtr do naszego __construct()i zdefiniujemy funkcję:

Dzięki filtrowi uzyskujemy dostęp do obiektu kuponu jako drugiego parametru. Za pomocą obiektu kuponu możemy sprawdzić jego właściwość, code, czy pasuje do naszego niestandardowego kodu kuponu. Jeśli tak, zwracamy dowolną etykietę. Dostosuj wyjście etykiety do tego, co chcesz. W przeciwnym razie zwracamy domyślną etykietę kuponu.

Usuń opcję użytkownika, aby usunąć rabat

Inną rzeczą, którą mogłeś zauważyć podczas wyświetlania naszego rabatu w koszyku i kasie, jest to, że po jego wysokości znajduje się link „[Usuń]”. Jest to domyślne zachowanie kuponów w WooCommerce, ale w naszym przypadku nie jest to pożądane. Zarówno dlatego, że może to dezorientować klientów, jak i dlatego, że nasz kod ponownie zastosuje go po usunięciu.

WooCommerce zapewnia filtr woocommerce_cart_totals_coupon_htmldla wyjścia kwoty. Na szczęście WooCommerce dostarcza wynik HTML tylko z samą kwotą jako trzeci parametr tego filtra. Możemy to po prostu zwrócić, zamiast upewniać się, że nasz rabat jest prawidłowo prezentowany z walutą i wszystkim innym.

Opcjonalnie: ukrywanie funkcji kuponów dla klientów

Kupony muszą być aktywowane w WooCommerce, aby nasza funkcja rabatowa działała, ale pamiętaj, że doda to opcję dla klientów ręcznego wprowadzania kodów kuponów zarówno w koszyku, jak i przy kasie. Jeśli nie chcesz pokazywać, że Twój sklep internetowy ma funkcję kuponową, a zwłaszcza uniemożliwić klientom ręczne wprowadzanie kodów kuponów, możesz to zrobić.

Usuwanie go z kasy

Usunięcie funkcji kuponu z kasy jest łatwe i można to zrobić w naszej klasie. Po prostu usuwamy haczyk, który renderuje „pudełko” kuponu, na przykład:

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

Usunięcie go z koszyka

Usunięcie funkcji kodu kuponu w koszyku nie jest niestety tak łatwe, jak jest to zakodowane w szablonie. Będziesz musiał zastąpić szablon koszyka WooCommerce, aby usunąć funkcję kuponu. Skopiuj plik pluginswoocommercetemplatescartcart.phpdo your-themewoocommercecartcart.php.

Pliki szablonów WooCommerce ciągle się zmieniają, więc podanie dokładnego numeru linii nie pomoże. Ale znajdziesz kod, który wyprowadza dane wejściowe i przycisk dla kuponu, blisko dołu pliku; wygląda mniej więcej tak:

To, co musisz zrobić, to skomentować wyniki związane z kuponami. Polecam dodać komentarz PHP /*tuż przed if-check i zamykając go */tuż po nawiasie zamykającym. Tak jak:

W tym momencie funkcjonalność kuponów Twojego sklepu internetowego powinna być praktycznie ukryta dla klientów! Ale Twoja niestandardowa zniżka powinna działać idealnie.

Źródło nagrywania: awhitepixel.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów