{"id":233617,"date":"2023-02-17T10:01:00","date_gmt":"2023-02-17T07:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233617"},"modified":"2022-11-11T00:39:56","modified_gmt":"2022-11-10T21:39:56","slug":"jak-programowo-dodac-niestandardowa-znizke-do-kasy-woocommerce","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-programowo-dodac-niestandardowa-znizke-do-kasy-woocommerce\/","title":{"rendered":"Jak programowo doda\u0107 niestandardow\u0105 zni\u017ck\u0119 do kasy WooCommerce"},"content":{"rendered":"\n<p>W tym po\u015bcie przyjrzymy si\u0119, jak programowo i automatycznie dodajemy rabaty. W tym celu wykorzystujemy funkcj\u0119 kuponow\u0105 WooCommerce, ale robimy to automatycznie i ukrywamy fakt, \u017ce jest to kupon dla klient\u00f3w. Stara\u0142em si\u0119, aby kod by\u0142 jak najbardziej og\u00f3lny, poniewa\u017c warunki stosowania zni\u017cek mog\u0105 si\u0119 bardzo r\u00f3\u017cni\u0107 dla ka\u017cdego, kto to czyta.<\/p>\n<h2>Dlaczego kupony s\u0105 sposobem na to?<\/h2>\n<p>W starszych wersjach WooCommerce mieli\u015bmy kilka (\u201ehackowych&quot;) opcji dodawania rabat\u00f3w z kodem, na przyk\u0142ad podanie ujemnej liczby <code>add_fee()<\/code>lub dzia\u0142anie z <code>get_discounted_price()<\/code>. Niestety te metody ju\u017c nie dzia\u0142aj\u0105 lub s\u0105 uwa\u017cane za starsze i zostan\u0105 usuni\u0119te w p\u00f3\u017aniejszych wersjach. Strukturalnie dobrym sposobem dodawania rabat\u00f3w jest korzystanie z wbudowanej funkcji kupon\u00f3w w WooCommerce.<\/p>\n<p>Jednak generalnie nie mo\u017cna automatycznie zastosowa\u0107 kuponu do koszyka. Wymaga od klienta r\u0119cznego wpisania kodu kuponu, kt\u00f3ry musia\u0142 otrzyma\u0107. W niekt\u00f3rych sklepach internetowych po prostu chcesz, aby zni\u017cka by\u0142a stosowana automatycznie po spe\u0142nieniu okre\u015blonego warunku, bez konieczno\u015bci wykonywania jakichkolwiek czynno\u015bci przez klienta. To naprawimy za pomoc\u0105 kodu.<\/p>\n<h2>Niestandardowe rabaty z kuponami<\/h2>\n<p>B\u0119dziesz musia\u0142 stworzy\u0107 kupon z kodem i skonfigurowa\u0107 go z \u017c\u0105danymi parametrami. B\u0119dziesz m\u00f3g\u0142 go zastosowa\u0107, usun\u0105\u0107 i zmieni\u0107 r\u00f3\u017cne wyniki wsz\u0119dzie tam, gdzie kupon jest widoczny dla klienta. Opcjonalnie, je\u015bli nie chcesz, aby kupony by\u0142y dost\u0119pne dla klient\u00f3w w Twoim sklepie internetowym, przyjrzymy si\u0119 kilku prostym sztuczkom ukrywaj\u0105cym opcje r\u0119cznego wprowadzania kod\u00f3w kupon\u00f3w.<\/p>\n<p>W poni\u017cszym przyk\u0142adzie kodu grupuj\u0119 ca\u0142y powi\u0105zany kod w klas\u0119 PHP. Pomaga to w czystszym kodzie, ale jest szczeg\u00f3lnie przydatne, poniewa\u017c chcemy odwo\u0142ywa\u0107 si\u0119 do kodu kuponu kilka razy. Zdefiniowanie jej jako zmiennej klasy jest lepsze ni\u017c powtarzanie jej w wielu funkcjach.<\/p>\n<h3>Utw\u00f3rz zni\u017ck\u0119 jako kupon<\/h3>\n<p>Pierwszym krokiem jest stworzenie kuponu, kt\u00f3ry b\u0119dzie \u201ezast\u0119pczym&#8221; dla Twojego rabatu. Naj\u0142atwiej jest po prostu utworzy\u0107 taki w admin WooCommerce (WooCommerce &gt; Kupony &gt; Dodaj kupon).<\/p>\n<p>Je\u015bli chcesz utworzy\u0107 kupon programowo, kupon jest w rzeczywisto\u015bci postem, za pomoc\u0105 kt\u00f3rego mo\u017cesz utworzy\u0107 <code>wp_insert_post()<\/code>&#8211; ale musisz uwa\u017ca\u0107, aby utworzy\u0107 post z kuponem tylko raz. WooCommerce ma kr\u00f3tki <a href=\"https:\/\/docs.woocommerce.com\/document\/create-a-coupon-programatically\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przewodnik, jak programowo utworzy\u0107 kupon<\/a>.<\/p>\n<p>Podaj unikalny slug jako kod kuponu i jako minimum ustaw kwot\u0119 rabatu (procentow\u0105 lub sta\u0142\u0105 op\u0142at\u0119). Je\u015bli chodzi o poni\u017cszy przyk\u0142ad kodu, utworzy\u0142em kod kuponu \u201e <code>example<\/code>&#8221; (zalecam jednak u\u017cycie bardziej kreatywnej i dopasowanej nazwy dla Twojej).<\/p>\n<h3>Tworzenie klasy PHP, kt\u00f3ra b\u0119dzie zawiera\u0142a ca\u0142y nasz kod<\/h3>\n<p>Przejd\u017amy wreszcie do kodowania! Mo\u017cesz zdefiniowa\u0107 t\u0119 klas\u0119 bezpo\u015brednio w motywie <code>functions.php<\/code>, kodzie wtyczki lub do\u0142\u0105czonym oddzielnym pliku.<\/p>\n<pre><code>class AWPCustomDiscount {\n    private $coupon_code = 'example';\n\u00a0\n    public function __construct() {\n\u00a0\n    }\n}\nnew AWPCustomDiscount();<\/code><\/pre>\n<p>Nazwij swoj\u0105 klas\u0119, jak chcesz, i zast\u0105p zmienn\u0105 klasy <code>$coupon_code<\/code>dowoln\u0105 nazw\u0105 kuponu. Nie zapomnij zainicjowa\u0107 klasy na ko\u0144cu (<code>new AWPCustomDiscount()<\/code>).<\/p>\n<p>Je\u015bli wcze\u015bniej programowa\u0142e\u015b zorientowane obiektowo, powinno to by\u0107 ci znajome. Je\u015bli nie, nie martw si\u0119, to powinno by\u0107 \u0142atwe do na\u015bladowania. Dodamy tutaj kilka funkcji i odwo\u0142amy si\u0119 do kodu kuponu za pomoc\u0105 <code>$this-&gt;coupon_code<\/code>. Zacznijmy od kodu odpowiedzialnego za faktyczne dodanie kuponu po spe\u0142nieniu warunk\u00f3w.<\/p>\n<h3>Programowe stosowanie kuponu<\/h3>\n<p>Z do\u015bwiadczenia nauczy\u0142em si\u0119, \u017ce podpi\u0119cie kodu do stosowania i usuwania kupon\u00f3w dzia\u0142a najlepiej i najbardziej konsekwentnie przy u\u017cyciu nast\u0119puj\u0105cych dw\u00f3ch podpi\u0119\u0107; jeden do koszyka (<code>woocommerce_before_cart<\/code>) i jeden do kasy (<code>woocommerce_before_checkout_form<\/code>).<\/p>\n<p>Wewn\u0105trz funkcji wszystko, co musimy zrobi\u0107, to sprawdzi\u0107 warunki, kt\u00f3re chcemy. WooCommerce oferuje funkcje umo\u017cliwiaj\u0105ce uzyskanie obiektu koszyka, <code>with WC()-&gt;cart<\/code>kt\u00f3rych mo\u017cemy u\u017cy\u0107, aby uzyska\u0107 wszystkie potrzebne nam informacje o koszyku, takie jak jego pozycje i sumy. Na przyk\u0142ad poni\u017cszy kod zastosuje zni\u017ck\u0119, je\u015bli suma koszyka (z wy\u0142\u0105czeniem wszelkich zni\u017cek) przekroczy okre\u015blon\u0105 kwot\u0119.<\/p>\n<p>Powinni\u015bmy r\u00f3wnie\u017c upewni\u0107 si\u0119, \u017ce je\u015bli warunki nie s\u0105 spe\u0142nione, nale\u017cy usun\u0105\u0107 rabat, je\u015bli zosta\u0142 wcze\u015bniej dodany. W naszym przyk\u0142adzie wyobra\u017amy sobie, \u017ce klient przekroczy\u0142 maksymaln\u0105 kwot\u0119, ale potem poszed\u0142 do koszyka, usun\u0105\u0142 niekt\u00f3re przedmioty i tym samym wr\u00f3ci\u0142 poni\u017cej wymaganej kwoty. Poniewa\u017c kupony nie s\u0105 stosowane automatycznie, wszystkie zastosowane kupony r\u00f3wnie\u017c musz\u0105 zosta\u0107 programowo usuni\u0119te.<\/p>\n<h4>Za pomoc\u0105<code>apply_coupon<\/code><\/h4>\n<p>Kupony s\u0105 dodawane do obiektu koszyka <code>apply_coupon()<\/code>podaj\u0105c jako parametr kod kuponu, a usuwane s\u0105 z obiektu koszyka z <code>remove_coupon()<\/code>parametrem kod kuponu. Wystarczaj\u0105co proste. Mo\u017cemy r\u00f3wnie\u017c skorzysta\u0107 z funkcji tak trafnie nazwanej <code>get_applied_coupons()<\/code>w obiekcie koszyka, aby sprawdzi\u0107, czy nasz kupon zosta\u0142 ju\u017c wykorzystany.<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n    }\n\u00a0\n    function addDiscount() {\n        if (is_admin() &amp;&amp; !defined('DOING_AJAX')) {\n            return;\n        }\n        if (WC()-&gt;cart-&gt;get_subtotal() &gt; 500) {\n            \/\/ add discount, if not added already\n            if (!in_array($this-&gt;coupon_code, WC()-&gt;cart-&gt;get_applied_coupons())) {\n                WC()-&gt;cart-&gt;apply_coupon($this-&gt;coupon_code);\n            }\n        } else {\n            \/\/ remove discount if it was previously added\n            WC()-&gt;cart-&gt;remove_coupon($this-&gt;coupon_code);\n        }\n    }\n    ...<\/code><\/pre>\n<p>Je\u015bli nie wiesz, jak u\u017cywa\u0107 zorientowanego obiektowo PHP w WordPressie; Oto kr\u00f3tkie podsumowanie tego, jak powy\u017csze dzia\u0142a: <code>__construct()<\/code>Funkcja b\u0119dzie dzia\u0142a\u0107 zawsze, gdy klasa zostanie zainicjowana, co robimy zaraz po klasie. Wewn\u0105trz <code>__construct()<\/code>zazwyczaj dodajesz wszystkie haki, tak jak zwykle, na przyk\u0142ad w \u015brodku <code>functions.php<\/code>. Aby WordPress m\u00f3g\u0142 znale\u017a\u0107 nasze funkcje w naszej klasie, musimy powiedzie\u0107 hakowi, aby odwo\u0142ywa\u0142 si\u0119 do funkcji zdefiniowanej w tablicy sk\u0142adaj\u0105cej si\u0119 z <code>$this<\/code>(obiektu klasy) i nazwy funkcji.<\/p>\n<p>Wewn\u0105trz funkcji <code>addDiscount()<\/code>programujemy w naszych warunkach. W powy\u017cszym przyk\u0142adzie pobieram sum\u0119 u\u017cycia koszyka <code>WC()-&gt;cart-&gt;get_subtotal()<\/code>i por\u00f3wnuj\u0119 go z moimi warunkami \u2013 powy\u017cej 500.<\/p>\n<p>Uwaga: Je\u015bli chcesz pobra\u0107 i por\u00f3wna\u0107 sumy koszyka, pami\u0119taj, \u017ce wi\u0119kszo\u015b\u0107 sum to kupony. Na przyk\u0142ad bardziej znajomy <code>WC()-&gt;cart-&gt;get_cart_contents_total()<\/code>zwr\u00f3ci sum\u0119 przed wysy\u0142k\u0105, ale zawiera rabaty; co oznacza, \u017ce \u200b\u200bje\u015bli Twoja zni\u017cka zosta\u0142a wcze\u015bniej zastosowana, ta suma b\u0119dzie b\u0142\u0119dna w por\u00f3wnaniu.<\/p>\n<p>Mo\u017cesz zadzwoni\u0107 <code>apply_coupon()<\/code>bez sprawdzania, czy kupon zosta\u0142 ju\u017c zastosowany (<code>if<\/code>sprawdzenie w linii 14), poniewa\u017c funkcja <code>apply_coupon()<\/code>sama upewni si\u0119, \u017ce nie doda go ponownie, je\u015bli zosta\u0142 wcze\u015bniej zastosowany. Jednak ta <code>if<\/code>kontrola zapobiega wy\u015bwietlaniu przez klienta komunikatu o b\u0142\u0119dzie \u201eKupon zosta\u0142 ju\u017c zastosowany&#8221; za ka\u017cdym razem, gdy koszyk jest aktualizowany.<\/p>\n<p>W ten spos\u00f3b Twoja zni\u017cka pojawi si\u0119 w sumach koszyka w koszyku i kasie:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152866-61e4fcd750a7d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152866-61e4fcd750a7d.png\" alt=\"Jak programowo doda\u0107 niestandardow\u0105 zni\u017ck\u0119 do kasy WooCommerce\" ><\/a><\/p>\n<h4>Twoje warunki zni\u017cki<\/h4>\n<p>Warunki otrzymania kuponu zale\u017c\u0105 wy\u0142\u0105cznie od Ciebie i Twoich potrzeb. We wcze\u015bniejszym po\u015bcie ustawi\u0142em kilka przyk\u0142adowych warunk\u00f3w <a href=\"https:\/\/awhitepixel.com\/blog\/guide-on-how-to-add-custom-fees-to-woocommerce-checkout\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dodania niestandardowej op\u0142aty<\/a> \u2013 na przyk\u0142ad w zale\u017cno\u015bci od miejsca wysy\u0142ki lub tego, kt\u00f3re produkty s\u0105 w koszyku. Mo\u017cesz r\u00f3wnie\u017c por\u00f3wna\u0107 dzisiejsz\u0105 dat\u0119, je\u015bli chcesz da\u0107 specjaln\u0105 zni\u017ck\u0119 \u015bwi\u0105teczn\u0105 lub halloweenow\u0105 lub da\u0107 zni\u017ck\u0119 na podstawie warunk\u00f3w u zalogowanego klienta.<\/p>\n<p>Je\u015bli wolisz zastosowa\u0107 kupon w zale\u017cno\u015bci od ustawie\u0144, kt\u00f3re ustawi\u0142e\u015b na samym kuponie \u2013 na przyk\u0142ad wykluczy\u0107 lub uwzgl\u0119dni\u0107 okre\u015blone identyfikatory produkt\u00f3w, mo\u017cesz to zrobi\u0107 r\u00f3wnie\u017c. Mo\u017cesz utworzy\u0107 instancj\u0119 kuponu z kodu kuponu, na przyk\u0142ad:<\/p>\n<pre><code>$coupon = new WC_Coupon($this-&gt;coupon_code);<\/code><\/pre>\n<p>Dzi\u0119ki temu obiektowi kuponu masz dost\u0119p do wszystkich funkcji pobierania dowolnych ustawie\u0144 ustawionych na kuponie. Na przyk\u0142ad uzyskanie identyfikator\u00f3w produkt\u00f3w, kt\u00f3re nale\u017cy do\u0142\u0105czy\u0107 do kuponu:<\/p>\n<pre><code>$required_products = $coupon-&gt;get_product_ids();<\/code><\/pre>\n<p>Zapoznaj si\u0119 z <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/class-WC_Coupon.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacj\u0105 klasy WC_Coupon<\/a>, aby dowiedzie\u0107 si\u0119, jak zdoby\u0107 to, czego potrzebujesz.<\/p>\n<h3>Napraw widoczn\u0105 etykiet\u0119 kuponu<\/h3>\n<p>Kupon powinien ju\u017c zosta\u0107 dodany i usuni\u0119ty, gdy Tw\u00f3j koszyk spe\u0142nia lub nie spe\u0142nia warunk\u00f3w okre\u015blonych w <code>addDiscount()<\/code>. Jednak w tabeli sum w koszyku i kasie rabat jest wy\u015bwietlany jako \u201eKupon: przyk\u0142ad&#8221; (lub inny kod kuponu). To nie jest dobrze! Na szcz\u0119\u015bcie \u0142atwo zmieni\u0107 t\u0119 etykiet\u0119 za pomoc\u0105 filtra <code>woocommerce_cart_totals_coupon_label<\/code>. Dodamy filtr do naszego <code>__construct()<\/code>i zdefiniujemy funkcj\u0119:<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n    }\n\u00a0\n    function discountLabel($label, $coupon) {\n        if ($coupon-&gt;code == $this-&gt;coupon_code) {\n            return __('Custom discount', 'txtdomain');\n        }\n        return $label;\n    }\n    ...<\/code><\/pre>\n<p>Dzi\u0119ki filtrowi uzyskujemy dost\u0119p do obiektu kuponu jako drugiego parametru. Za pomoc\u0105 obiektu kuponu mo\u017cemy sprawdzi\u0107 jego w\u0142a\u015bciwo\u015b\u0107, <code>code<\/code>, czy pasuje do naszego niestandardowego kodu kuponu. Je\u015bli tak, zwracamy dowoln\u0105 etykiet\u0119. Dostosuj wyj\u015bcie etykiety do tego, co chcesz. W przeciwnym razie zwracamy domy\u015bln\u0105 etykiet\u0119 kuponu.<\/p>\n<h3>Usu\u0144 opcj\u0119 u\u017cytkownika, aby usun\u0105\u0107 rabat<\/h3>\n<p>Inn\u0105 rzecz\u0105, kt\u00f3r\u0105 mog\u0142e\u015b zauwa\u017cy\u0107 podczas wy\u015bwietlania naszego rabatu w koszyku i kasie, jest to, \u017ce po jego wysoko\u015bci znajduje si\u0119 link \u201e[Usu\u0144]&#8221;. Jest to domy\u015blne zachowanie kupon\u00f3w w WooCommerce, ale w naszym przypadku nie jest to po\u017c\u0105dane. Zar\u00f3wno dlatego, \u017ce mo\u017ce to dezorientowa\u0107 klient\u00f3w, jak i dlatego, \u017ce nasz kod ponownie zastosuje go po usuni\u0119ciu.<\/p>\n<p>WooCommerce zapewnia filtr <code>woocommerce_cart_totals_coupon_html<\/code>dla wyj\u015bcia kwoty. Na szcz\u0119\u015bcie WooCommerce dostarcza wynik HTML tylko z sam\u0105 kwot\u0105 jako trzeci parametr tego filtra. Mo\u017cemy to po prostu zwr\u00f3ci\u0107, zamiast upewnia\u0107 si\u0119, \u017ce nasz rabat jest prawid\u0142owo prezentowany z walut\u0105 i wszystkim innym.<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n        add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3);\n    }\n\u00a0\n    function discountHtml($coupon_html, $coupon, $discount_amount_html) {\n        if ($coupon-&gt;code == $this-&gt;coupon_code) {\n            return $discount_amount_html;\n        }\n        return $coupon_html;\n    }\n    ...<\/code><\/pre>\n<h3>Opcjonalnie: ukrywanie funkcji kupon\u00f3w dla klient\u00f3w<\/h3>\n<p>Kupony musz\u0105 by\u0107 aktywowane w WooCommerce, aby nasza funkcja rabatowa dzia\u0142a\u0142a, ale pami\u0119taj, \u017ce doda to opcj\u0119 dla klient\u00f3w r\u0119cznego wprowadzania kod\u00f3w kupon\u00f3w zar\u00f3wno w koszyku, jak i przy kasie. Je\u015bli nie chcesz pokazywa\u0107, \u017ce Tw\u00f3j sklep internetowy ma funkcj\u0119 kuponow\u0105, a zw\u0142aszcza uniemo\u017cliwi\u0107 klientom r\u0119czne wprowadzanie kod\u00f3w kupon\u00f3w, mo\u017cesz to zrobi\u0107.<\/p>\n<h4>Usuwanie go z kasy<\/h4>\n<p>Usuni\u0119cie funkcji kuponu z kasy jest \u0142atwe i mo\u017cna to zrobi\u0107 w naszej klasie. Po prostu usuwamy haczyk, kt\u00f3ry renderuje \u201epude\u0142ko&#8221; kuponu, na przyk\u0142ad:<\/p>\n<pre><code>    ...\n    public function __construct() {\n        add_action('woocommerce_before_cart', [$this, 'addDiscount']);\n        add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']);\n        add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2);\n        add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3);\n        remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10);\n    }\n    ...<\/code><\/pre>\n<h4>Usuni\u0119cie go z koszyka<\/h4>\n<p>Usuni\u0119cie funkcji kodu kuponu w koszyku nie jest niestety tak \u0142atwe, jak jest to zakodowane w szablonie. B\u0119dziesz musia\u0142 zast\u0105pi\u0107 szablon koszyka WooCommerce, aby usun\u0105\u0107 funkcj\u0119 kuponu. Skopiuj plik <code>pluginswoocommercetemplatescartcart.php<\/code>do <code>your-themewoocommercecartcart.php<\/code>.<\/p>\n<p>Pliki szablon\u00f3w WooCommerce ci\u0105gle si\u0119 zmieniaj\u0105, wi\u0119c podanie dok\u0142adnego numeru linii nie pomo\u017ce. Ale znajdziesz kod, kt\u00f3ry wyprowadza dane wej\u015bciowe i przycisk dla kuponu, blisko do\u0142u pliku; wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<pre><code>...\n&lt;?php if (wc_coupons_enabled()) { ?&gt;\n    &lt;div class=\"coupon\"&gt;\n        &lt;label for=\"coupon_code\"&gt;&lt;?php esc_html_e( 'Coupon:', 'woocommerce' ); ?&gt;&lt;\/label&gt; &lt;input type=\"text\" name=\"coupon_code\" class=\"input-text\" id=\"coupon_code\" value=\"\" placeholder=\"&lt;?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?&gt;\" \/&gt; &lt;button type=\"submit\" class=\"button\" name=\"apply_coupon\" value=\"&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;\"&gt;&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;&lt;\/button&gt;\n        &lt;?php do_action( 'woocommerce_cart_coupon' ); ?&gt;\n    &lt;\/div&gt;\n&lt;?php } ?&gt;\n...<\/code><\/pre>\n<p>To, co musisz zrobi\u0107, to skomentowa\u0107 wyniki zwi\u0105zane z kuponami. Polecam doda\u0107 komentarz PHP <code>\/*<\/code>tu\u017c przed <code>if<\/code>-check i zamykaj\u0105c go <code>*\/<\/code>tu\u017c po nawiasie zamykaj\u0105cym. Tak jak:<\/p>\n<pre><code>...\n&lt;?php \/* if (wc_coupons_enabled()) { ?&gt;\n    &lt;div class=\"coupon\"&gt;\n        &lt;label for=\"coupon_code\"&gt;&lt;?php esc_html_e( 'Coupon:', 'woocommerce' ); ?&gt;&lt;\/label&gt; &lt;input type=\"text\" name=\"coupon_code\" class=\"input-text\" id=\"coupon_code\" value=\"\" placeholder=\"&lt;?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?&gt;\" \/&gt; &lt;button type=\"submit\" class=\"button\" name=\"apply_coupon\" value=\"&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;\"&gt;&lt;?php esc_attr_e( 'Apply coupon', 'woocommerce' ); ?&gt;&lt;\/button&gt;\n        &lt;?php do_action( 'woocommerce_cart_coupon' ); ?&gt;\n    &lt;\/div&gt;\n&lt;?php } *\/ ?&gt;\n...<\/code><\/pre>\n<p>W tym momencie funkcjonalno\u015b\u0107 kupon\u00f3w Twojego sklepu internetowego powinna by\u0107 praktycznie ukryta dla klient\u00f3w! Ale Twoja niestandardowa zni\u017cka powinna dzia\u0142a\u0107 idealnie.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym samouczku przyjrzymy si\u0119, jak programowo doda\u0107 rabat w WooCommerce. U\u017cywamy kupon\u00f3w, ale robimy to automatycznie i ukrywamy, \u017ce to kupon.<\/p>\n","protected":false},"author":1,"featured_media":152867,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,919,897,919,1110,815,845,845,856,856,866,866,815],"tags":[1169],"class_list":{"0":"post-233617","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-inny","11":"category-n-a","12":"category-wtyczki","13":"category-samouczki","15":"category-woocommerce-7","17":"category-wordpress-7","20":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233617"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233617\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/152867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}