• Home
  • E-commerce
  • Jak uzależnić sposób płatności od metody wysyłki w WooCommerce

Jak uzależnić sposób płatności od metody wysyłki w WooCommerce

Metody wysyłki w WooCommerce są niezależne od sposobów płatności, co powoduje problemy. Gdy ktoś wybierze wysyłkę kurierem za pobraniem, to nadal może zapłacić z góry przelewem. Wprowadza to zamieszanie i utrudnia proces zamawiania. Zobaczmy, jak skonfigurować metody płatności i wysyłki w WooCommerce na potrzeby Polski i odpowiednio je ze sobą powiązać.

WooCommerce - jak ustawić sposoby płatności zależne od wysyłki

Wiele gotowych sklepów internetowych, takich jak Prestashop czy WooCommerce, ma jeden poważny problem z dostosowaniem ich na potrzeby polskiego rynku. Chodzi o ustawienie metod wysyłki i  przypisanie ich do konkretnych metod płatności. Wszyscy wiemy, że wysyłka produktu za pobraniem jest droższa, niż wysyłka produktu opłaconego wcześniej z góry. W związku z tym koszt dostawy musi się zmieniać w zależności od tego, czy klient wybierze płatność przy odbiorze, czy też zapłaci za zamówienie z góry (przelewem lub płatnością online). WooCommerce jednak na to domyślnie nie pozwala.

Na czym polega problem z dostawą i płatnością w WooCommerce?

Niestety przeniesienie powyższej zasady na realia sklepów internetowych opartych na WooCommerce (a także np. na Prestashop) jest domyślnie niemożliwe. Wynika to z tego, że twórcy po prostu takiej funkcji nie zaimplementowali i domyślnie działanie tych sklepów jest takie, że klient wybiera np. dostawę kurierem, a dopiero w następnym kroku wybiera sposób płatności.. Problem polega na tym, że koszt dostawy jest przypisany na stałe dla danej metody wysyłki (np. dla kuriera) i nie ma możliwości wprowadzenia modyfikacji tej kwoty na podstawie sposobu płatności (np. zwiększenia kosztu paczki kurierskiej po wybraniu płatności za pobraniem), gdyż te dwie rzeczy nie są po prostu ze sobą mechanicznie powiązane w skrypcie WooCommerce.

Rozwiązaniem powyższego problemu jest zduplikowanie metod dostawy, przypisanie im nazw płatności (np. „Kurier – za pobraniem”, „Kurier – płatność z góry”, „Poczta Polska – za pobraniem”, „Poczta Polska – płatność z góry”) i wprowadzenie osobnych kwot za wysyłkę. Problem rozwiązany? Nie do końca. Klient „w kasie”, który wybierze dostawę „Poczta Polska – za pobraniem” może w kolejnym kroku i tak wybrać płatność z góry przelewem, bo nadal będą mu się wyświetlać wszystkie sposoby płatności.

WooCommerce - problem z wyborem dostawy i sposobu płatności (niespójność)

Wynika to z tego, że sposoby płatności nie są w żaden sposób mechanicznie uzależnione od metod wysyłki. Wprowadza to straszne zamieszanie podczas finalizacji zamówienia, gdyż w jednym miejscu klient wybiera paczkę kurierską za pobraniem, a zaraz pod spodem wyświetla mu się domyślnie zaznaczona płatność przelewem. Rozwiązaniem jest ukrycie wybranych sposobów płatności na podstawie aktualnie zaznaczonej metody wysyłki. Efekt wtedy będzie taki, jak poniżej. Brzmi dobrze, ale jak to zrobić?

WooCommerce - prawidłowa konfiguracja metod wysyłki i sposobów płatności

WooCommerce, niestety, nie ma żadnej wbudowanej funkcji, która pozwalałaby na ukrycie określonych sposobów płatności na podstawie wybranej metody wysyłki (np. ukrycie płatności przelewem po wybraniu paczki kurierskiej za pobraniem). Są oczywiście do tego płatne wtyczki, ale my pokażemy wam krok po kroku, jak to zrobić za darmo. Najpierw skonfigurujemy odpowiednio wszystkie metody dostawy, a następnie za pomocą nieskomplikowanego kodu PHP wprowadzimy warunki, które będą ukrywać określone sposoby płatności na podstawie aktualnie wybranej metody dostawy. Dzięki temu klient, który wybierze np. opcję „Kurier – za pobraniem”, w następnym kroku nie zobaczy żadnych metod płatności z góry. Wszystko będzie jasne, proste i klarowne.

Krok 1: Ustaw odpowiednie metody wysyłki

Pierwszym krokiem jest skonfigurowanie metod dostawy, przypisując im w nazwie określone sposoby płatności, a także ustawiając odpowiednie ceny. Na potrzeby poradnika stworzymy takie najpopularniejsze zestawienie, czyli dostawę Pocztą Polską i Kurierem w dwóch wariantach – za pobraniem oraz z płatnością z góry.

W poradniku opieramy się na najnowszej wersji WooCommerce 2.6, w której wprowadzono już funkcję stref wysyłki. Aby skonfigurować wysyłki wedle powyższego schematu, musimy utworzyć strefę wysyłkową dla Polski i dodać w niej cztery metody wysyłki (dwie dla Poczty Polskiej, dwie dla Kuriera) oparte na tzw. płaskiej stawce, czyli na stałej kwocie, którą podamy dla każdej wysyłki.

Wejdź do panelu administracyjnego WordPressa, a następnie z menu bocznego wybierz „WooCommerce > Ustawienia”. W ustawieniach WooCommerce przejdź do zakładki „Wysyłka”.

WooCommerce - dodaj nową strefę wysyłki dla Polski

Pojawi się tu okno tworzenia nowej strefy wysyłkowej (domyślnie jest tylko jedna strefa o nazwie „Reszta świata” – możemy ją zignorować). Tworzymy nową strefę o nazwie „Polska” i przypisujemy jej obok region „Polska”. Potwierdzamy strefę przyciskiem „Zapisz zmiany”. Wszystkie metody wysyłki dodane do tej strefy będą obowiązywały klientów, którzy dokonują zakupów w Polsce.

Wejdź do utworzonej strefy wysyłkowej „Polska”.  Zauważysz, że póki co jest ona pusta, gdyż nie zdefiniowano w niej jeszcze żadnych metod płatności dla osób zamawiających z Polski.

WooCommerce - pusta strefa wysyłkowa

W dolnym prawym rogu kliknij przycisk „Dodaj metodę wysyłki”. Jako typ dostawy wybierz „Płaska stawka” i kliknij dodaj. Powtórz to kilka razy, aby dodać cztery warianty dostawy opartej na stałej kwocie (dwie dla Poczty Polskiej i dwie dla Kuriera).

Dodawanie nowej metody wysyłki (Płaska stawka)
WooCommerce - cztery płaskie stawki

Na liście wyświetlają się teraz cztery pozycje o nazwie „Płaska stawka”. Musisz teraz edytować wszystkie pozycje „Płaska stawka” i ustawić im odpowiednie nazwy w zależności od dostawcy, wyłączyć opodatkowanie oraz wpisać odpowiedni koszt wysyłki dla danej kombinacji.

W moim przypadku będzie to wyglądać następująco:

  • Poczta Polska (płatne z góry) – 10 zł
  • Poczta Polska (za pobraniem) – 12 zł
  • Kurier (płatne z góry) – 14 zł
  • Kurier (za pobraniem) – 16 zł

Kliknij w przycisk „Edytuj” obok danej pozycji z płaską stawką, a następnie w nowym oknie wpisz odpowiednią nazwę dla kombinacji wysyłki/płatności, wyłącz opodatkowanie, a następnie podaj kwotę wysyłki dla danej kombinacji. Powtórz to dla każdej pozycji z płaską stawką, aż ustawisz wszystkie potrzebne kombinacje.

WooCommerce - edycja płaskiej stawki

Po wszystkim kliknij w przycisk „Zapisz zmiany”. Pierwszą część poradnika i pierwszy problem mamy za sobą. Klient podczas finalizacji zamówienia ma do wyboru cztery metody dostawy, które mają przypisane odpowiednie kwoty w zależności od sposoby płatności.

woocommerce-skonfigurowane-metody-wysylki

Występuje jednak wspomniany wcześniej problem – pomimo tego, że klient wybierze np. „Kurier (płatne z góry)”, to w następnym kroku może i tak wybrać płatność przy odbiorze. Musimy zatem wykonać następny krok, czyli wprowadzić ukrywanie określonych metod płatności na podstawie wybranej wysyłki.

Krok 2: Parowanie metod dostawy ze sposobami płatności

Jak wcześniej wspomniałem, najprostszym sposobem jest skorzystanie z płatnej wtyczki z serwisu WP Desk – Aktywne płatności, która oferuje po prostu zaznaczenie i odznaczenie wybranych sposobów płatności dla danej metody wysyłki. Jest to dziecinnie proste i zajmuje kilka sekund – wystarczy np. dla Kuriera i Poczty Polskiej (za pobraniem) odznaczyć płatności przelewem, a dla Kuriera i Poczty Polskiej (płatne z góry) odznaczyć opcje płatności przy odbiorze.

Ja jednak obiecałem wam pokazać, jak to zrobić za darmo za pomocą dość prostego kodu PHP i tej obietnicy mam zamiar się trzymać. Jeśli nie chcecie kupować wtyczki, to możecie stworzyć prosty skrypt PHP, oparty na funkcji „if/else” (jeśli X to Y), który będzie sprawdzał, jaka metoda dostawy jest aktualnie zaznaczona, po czym będzie ukrywał te sposoby płatności, który są dla niej nieodpowiednie. Pora więc na małą lekcję PHP dla zielonych (nie martwcie się, nie będzie ciężko).

W tym celu skorzystamy z poniższego skryptu PHP, stworzonego przez użytkownika Jeroen Sormani.

Aktualizacja: 02.02.2018 r. – poniższy skrypt został zaktualizowany, aby wyeliminować problem ze znikającą zawartością sekcji „Wygląd > Menu” w panelu administracyjnym WordPressa. Jeśli występuje u Ciebie ten problem, to sprawdź swoją aktualnie używaną funkcję i zaktualizuj ją o poniższy kod.

/**
 * Filter payment gateways
 */
function my_custom_available_payment_gateways( $gateways ) {
	$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();

		if ( in_array( 'flat_rate:1', $chosen_shipping_rates ) ) :
		unset( $gateways['cod'] );
		
		elseif ( in_array( 'flat_rate:2', $chosen_shipping_rates ) ) :
		unset( $gateways['bacs'] );
		
		elseif ( in_array( 'flat_rate:3', $chosen_shipping_rates ) ) :
		unset( $gateways['cod'] );
		
		elseif ( in_array( 'flat_rate:4', $chosen_shipping_rates ) ) :
		unset( $gateways['bacs'] );

	endif;
	return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

Jeśli wszystkie metody dostawy skonfigurowałeś identycznie jak ja, to nie musisz do powyższego kodu wprowadzać już jakichkolwiek zmian. Domyślnie jest on ustawiony tak, że dla metod wysyłki za pobraniem ukrywa on płatność przelewem, a z kolei dla metod wysyłki opartych na przelewie ukrywa on płatność za pobraniem.

Prawdopodobnie jednak będziesz mieć inne metody wysyłki lub będzie ich więcej, dlatego pokażę Ci, jak zmodyfikować ten skrypt na swoje potrzeby. Interesują nas linie pogrubione, a konkretnie to elementy podświetlone na zielono i niebiesko. Skrypt działa prosto – dla danej metody wysyłki (zielony tekst) ukrywa dany sposób płatności (niebieski tekst). Działa to po prostu na zasadzie „jeśli zaznaczona jest wysyłka X, to ukrywaj płatność Y”.

  • Rozłożenie skryptu na elementy pierwsze

Elementy podświetlone na zielono to metody wysyłki, które skonfigurowaliśmy w pierwszym kroku. Nazywają się one flat_rate, gdyż jest to ustawiona przez nas „Płaska stawka”. Z kolei cyferka, która stoi obok flat_rate to pozycja danej metody wysyłki na liście w ustawieniach wysyłek. Przykładowo, flat_rate:2 to druga metoda wysyłki oparta na płaskiej stawce – w naszym wypadku Poczta Polska (za pobraniem).

W WooCommerce znajdziemy trzy typy identyfikatorów dla metod wysyłek. Są to:

  • flat_rate – płaska stawka
  • local_pickup – odbiór osobisty
  • free_shipping – darmowa dostawa

Jeśli w przyszłości dodamy sobie np. jedną metodę wysyłki typu Odbiór osobisty i zechcemy dla niej ustawić jakąś regułę, to w skrypcie będzie ona miała identyfikator local_pickup:1.

Elementy podświetlone na niebiesko, to sposoby płatności, które są ukrywane dla danej metody wysyłki. Przykładowo, „cod”, to skrót od „cash on delivery”, czyli „płatność za pobraniem”.

W WooCommerce znajdziemy cztery typy identyfikatorów dla sposobów płatności. Są to:

  • cod – płatność przy odbiorze
  • bacs – płatność zwykłym przelewem
  • cheque – płatność czekiem
  • paypal – płatność PayPalem

Skrypt zaczyna nabierać sensu, prawda? Jeśli zatem się przyjrzymy określonym fragmentom, to wszystko stanie się niesamowicie proste. Spójrzmy np. na poniższy fragment:

elseif ( in_array( 'flat_rate:4', $chosen_shipping_rates ) ) :

unset( $gateways['bacs'] );

Widzimy od razu, że fragment ten sprawia, że gdy wybrana jest opcja flat_rate:4, czyli Kurier (za pobraniem), to ukrywana jest opcja płatności bacs, czyli przelew bankowy. Jeśli chcecie dodać nowe elementy i jeszcze więcej rzeczy poukrywać, to wystarczy, że skopiujecie powyższy fragment i wkleicie go wśród pozostałych, a następnie zmienicie zielone i niebieskie pola na odpowiednie nazwy metod wysyłek i płatności. Przykładowo, jeśli dla odbioru osobistego (local_pickup:1) chcielibyśmy wyłączyć płatność przy odbiorze (cod), tak, aby oferować tylko odbiór osobisty po przedpłacie na konto, to wystarczy, że dodacie poniższy fragment:

elseif ( in_array( 'local_pickup:1', $chosen_shipping_rates ) ) :

unset( $gateways['cod'] );

W ten sposób, gdy ktoś zaznaczy „Odbiór osobisty”, to opcja płatności przy odbiorze zniknie i klient będzie mógł wybrać tylko płatność z góry. W ten sposób możecie stworzyć nieskończoną ilość kombinacji i ukrywać określone metody płatności dla konkretnych sposobów wysyłek.

W jakim pliku umieścić gotowy skrypt na ukrywanie sposobów płatności?

Skrypt ten należy umieścić w pliku „functions.php”, który znajduje się w katalogu z twoim aktualnie uaktywnionym szablonem. Można to zrobić bezpośrednio w tym pliku, logując się na serwer FTP ze swoim sklepem. Ma to jednak poważny minus – jeśli twój motyw aktualizuje się samodzielnie do nowszej wersji, to aktualizacja usunie twoje wpisy z pliku functions.php.

Dlatego zdecydowanie lepszym rozwiązaniem jest skorzystanie z odpowiedniej wtyczki, która umożliwia dodawanie własnych funkcji PHP do WordPressa bez ryzyka ich utraty. Gorąco zalecam skorzystanie właśnie z tego rozwiązania, aczkolwiek pokażę obie metody, aby osoby nielubiące dodatkowych wtyczek mogły wszystko wykonać ręcznie.

  • Dodanie kodu za pomocą wtyczki My Custom Functions (zalecana metoda)

Najprostszy sposób, który sprawi, że nasz kod przetrwa wszystkie aktualizacje WordPressa i motywów. Wejdź do zakładki „Wtyczki > Dodaj nową” i wyszukaj na liście dodatku o nazwie My Custom Functions.  Kliknij przycisk „Zainstaluj” obok wtyczki, a następnie „Włącz”.

Następnie przejdź w panelu administracyjnym do zakładki „Ustawienia > PHP Inserter”. Znajdziesz tu pole „Functions (PHP code)”. Wklej w to miejsce swój kod, a następnie przestaw przełącznik z pozycji OFF do pozycji ON, aby uaktywnić kod. Zachowaj zmiany przyciskiem „Zapisz”. Kod będzie aktywny i będzie automatycznie dodawany do twojej strony.

Uwaga! Jeśli wklejony kod będzie niepoprawny, to strona może przestać się otwierać i zacznie wyświetlać błąd.  Nie musisz panikować. W takiej sytuacji należy wejść na serwer FTP swojej strony i udać się do folderu „wp-content/plugins/my-custom-functions/”. W tym folderze znajdziesz plik bez rozszerzenia o nazwie „START”. Zmień jego nazwę na „STOP”. Zatrzyma to wykonywanie kodu we wtyczce My Custom Functions, dzięki czemu strona znów zacznie działać. Teraz będzie można ponownie wejść do zakładki PHP Inserter i poprawić swój kod. Po poprawieniu i zapisaniu kodu należy zmienić nazwę pliku „STOP” na „START”, aby funkcja ponownie była wykonywana.

  • Ręczne dodanie kodu do pliku functions.php swojego motywu WordPressa

Jak wspomniałem, ta metoda nie jest zalecana w przypadku motywów, które same się aktualizują. Aktualizacja motywu nadpisze nasze zmiany w pliku functions.php, czyli po prostu usunie nasz kod. Jeśli jednak preferujesz ten sposób dodawania funkcji do strony to oto, co należy zrobić. Zaloguj się na serwer FTP, a następnie przejdź do poniższej ścieżki:

wp-content/themes/nazwa_twojego_motywu/

W środku znajdziesz plik “functions.php”. Skopiuj go do na dysk twardy, a następnie otwórz za pomocą Notatnika lub Notepad++.

WooCommerce - wklej skrypt do pliku Functions.php

Na samym końcu tego pliku dopisz gotowy skrypt, zapisz plik, a następnie prześlij go ponownie na serwer, nadpisując stary plik. Pamiętaj, że wszystkie zmiany użytkownika zostają usunięte przy każdej aktualizacji i będziesz musiał je wprowadzać za każdym razem, gdy szablon zostanie zaktualizowany do nowszej wersji. Jeśli nie chcesz tego robić, to skorzystaj z metody dodawania swoich funkcji za pomocą odpowiedniej wtyczki (np. My Custom Functions opisanej powyżej).


Szukasz sprawdzonego hostingu dla swojego sklepu na WordPressie? Sprawdź ofertę LH.pl i bezpłatnie przetestuj dowolny pakiet hostingowy.

Tags:, ,

65
Dodaj komentarz

avatar
40 Comment threads
25 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
39 Comment authors
PawełjankesDamonGrzegorzWojciech Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
Archibald Archibald
Gość
Archibald Archibald

Witam.
Niestety u mnie kod nie działa nie rozumiem w czym problem więc będę wdzięczny za pomoc

Piotr Wiktor
Gość
Piotr Wiktor

Jak to mówią najstarsi górale z pod Sosnowca: „You made my day BRO” Dzięki)

Piękno i Dom
Gość
Piękno i Dom

Super – działa prawie wszystko. Nie wiem jak wykluczyć dla wysyłki pobraniowej dwóch metod płatności
‚bacs’ i ‚transferuj’

wwwebcal
Gość
wwwebcal

Ja mam zgryz z wtyczkami WooCommerce Conditional Shipping and Payments i WooCommerce Table Rate Shipping. W Table Rate zdefinoiwane dwie opcje wysyłki – 1: poczta i kurier, 2 pobraniowa. W conditionalu zaś utworzone 3 reguły – dla poczty i kuriera przypisany odpowiedni table rate i wykluczona metoda pobraniowa, zaś dla pobrania przypisany adekwatny TR i wykluczone inne metody poza pobraniem. Problem jest taki, że w zamówieniu po wyborze wysyłki za pobraniem wyskakuje błąd informujący o niedostępności płatności przelewem. W dodatku jak by poprzedni wybór stosowało do aktualnego – więc jak następnie kliknę na wysyłke poczta, to mam błąd niedostepności zapłaty… Czytaj więcej »

Grzegorz Siemiński
Gość
Grzegorz Siemiński

Witam, Jak wklejam kod to strona przestaje działać – „pusta strona” Nie ma znaczenia czy wkleję kod na końcu czy w środku. Wklejany kod to: ———————————————————————————————————————– /** * Filter payment gateways */ function my_custom_available_payment_gateways( $gateways ) { $chosen_shipping_rates = WC()->session->get( ‚chosen_shipping_methods’ ); if ( in_array( ‚flexible_shipping_3_1’, $chosen_shipping_rates ) ) : unset( $gateways[‚cod’] ); elseif ( in_array( ‚flexible_shipping_3_3’, $chosen_shipping_rates ) ) : unset( $gateways[‚bacs’] ); unset( $gateways[‚przelewy24’] ); elseif ( in_array( ‚flexible_shipping_3_4’, $chosen_shipping_rates ) ) : unset( $gateways[‚cod’] ); elseif ( in_array( ‚flexible_shipping_3_2’, $chosen_shipping_rates ) ) : unset( $gateways[‚bacs’] ); unset( $gateways[‚przelewy24’] ); endif; return $gateways; } add_filter( ‚woocommerce_available_payment_gateways’, ‚my_custom_available_payment_gateways’ );… Czytaj więcej »

Mateusz Olkusnik (OlekGraf)
Gość
Mateusz Olkusnik (OlekGraf)

Witam,
Pierwsza opcja ukrywania płatności przy odbiorze przy wyborze kuriera działa.
Problem pojawia się później.
Przy pobraniu chcę zostawić tylko za pobraniem a ukryć płatności kartą One Click oraz płatności Dotpay. Poniżej zrzut ekranu koszyka oraz kodu.
Czy robię coś nie tak?
comment image

Figle Migle
Gość
Figle Migle

A co gdy mam na sklepie produkty „małe” ze stawką1 za płatność z góry i pobranie oraz „duże” ze stawką2. Da się to jakoś rozgraniczyć aby klient w koszyku nie musiał sam decydować czy chce:
-pobranie za „mały”
-płatność z góry za „mały”
-pobranie za „duży”
-płatność z góry za „duży” ?

Mateusz Olkusnik (OlekGraf)
Gość
Mateusz Olkusnik (OlekGraf)

Czy można takim sposobem ukryć inne opcje dostawy?
Chodzi mi o to, gdy pojawi się Darmowa dostawa to chciałbym ukryć możliwość wyboru Kuriera. Opcje płatności pozostaną bez zmian.

comment image

Milosz
Gość
Milosz

Użyłem tego kodu w moim motywie potomnym. Co do zakresu swojej funkcji działa tak jak powinno. Niestety wykracza poza swój zakres i powoduje błędy. 1. Sprawia że przestaje działać wtyczka Max Mega Menu 2. Nie działa edytor menu 3. Nie chce się generować mapa XML, system nadaje komunikat błędu: „This page contains the following errors: error on line 2 at column 6: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error.” Może szkody są większe lecz to zauważyłem od razu. Po usunięciu kodu z function.php wszystko wraca… Czytaj więcej »

Piotr Majda
Gość
Piotr Majda

Witam. widoczny mam w Panelu Moje konto po zalogowaniu następujący błąd: Warning: in_array() expects parameter 2 to be array, null given in /public_html/wp-content/themes/functions.php on line 48Warning: in_array() expects parameter 2 to be array, null given in /public_html/wp-content/themes/functions.php on line 51 Jest to dokładnie : if ( in_array( ‚flat_rate:4’, $chosen_shipping_rates ) ) : unset( $gateways[‚cod’] ); elseif ( in_array( ‚flat_rate:2’, $chosen_shipping_rates ) ) : unset( $gateways[‚bacs’] ); Czy ktoś pomoże mi zlikwidować ten błąd? Dodam, że ukrywanie działa na stronie poprawnie. Flat_rat:4 to wysyłka z płaską stawką 0zł (darmowa) natomiast flat_rate:2 to pobranie.

Milosz
Gość
Milosz

Uwaga, kod jest źle napisany, nie stanowi rozwiązania, wprowadza liczne błędy na stronie.
Jak się okazuje sprawy tej nie można rozwiązać dodając kilka linijek kodu, w ten sposób można tylko zaszkodzić.

Marcin Rembek
Gość
Marcin Rembek

Mam problem z darmową dostawą zaznacza mi płatność przelewem ale popranie nie znika

function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = WC()->session->get( ‚chosen_shipping_methods’ );

if ( in_array( ‚flat_rate:1’, $chosen_shipping_rates ) ) :
unset( $gateways[‚cod’] );

elseif ( in_array( ‚flat_rate:2’, $chosen_shipping_rates ) ) :
unset( $gateways[‚bacs’] );

elseif ( in_array( ‚flat_rate:3’, $chosen_shipping_rates ) ) :
unset( $gateways[‚cod’] );

elseif ( in_array( ‚flat_rate:4’, $chosen_shipping_rates ) ) :
unset( $gateways[‚bacs’] );

elseif ( in_array( ‚flat_rate:5’, $chosen_shipping_rates ) ) :
unset( $gateways[‚cod’] );

elseif ( in_array( ‚flat_rate:6’, $chosen_shipping_rates ) ) :
unset( $gateways[‚bacs’] );

elseif ( in_array( ‚free_shipping:1’, $chosen_shipping_rates ) ) :
unset( $gateways[‚cod’] );

endif;
return $gateways;
}

Marcin Badyński
Gość
Marcin Badyński

Warto dodać, iż numer np. flat_rare:2 – bierzemy z panelu – a nie licząc po kolei, tylko po ID, które ma każda forma płatności.

Również zauważyłem, że po dodaniu kodu – pojawia się błąd w zapleczu:

comment image

Marcin Dworaczek
Gość
Marcin Dworaczek

Zrobiłem dokładnie tak jak jest w opisie. Wkleiłem kod bezpośrednio w wordpress’ie do pliku functions.php (do motywu potomnego shoopkeeper’a) zaktualizowałem i nic. nie zadziałał ten skrypt 🙁 Generalnie nic mi się nie wiesza, nie mam komunikatów o błędzie.

Marcin Dworaczek
Gość
Marcin Dworaczek

mam takie zagadnienie.
Na bazie free shipping lub local pickup tworzę opcję odbioru osobistego. Ukrywam wszystkie formy płatności (przelew zwykły, pobranie, przelewy24) i wywala mi takim komunikatem: Przykro nam, ale dla Twojego regionu nie jest udostępniona żadna
metoda płatności. Prosimy skontaktuj się z nami, jeśli potrzebujesz
wyjaśnień lub chcesz omówić alternatywne sposoby płatności.

No i nie da się sfinalizować zamówienia w takim przypadku. Czy jest na to jakiś sposób?

Krzysztof Michalski
Gość
Krzysztof Michalski

Pojawia się problem z My Account po zalogowaniu na konto a przed przejściem do zamówienia:

Warning: in_array() expects parameter 2 to be array, null given in /home/hewra/public_html/bellamo/wp-content/themes/flatsome-child/functions.php on line 10

Warning: in_array() expects parameter 2 to be array, null given in /home/hewra/public_html/bellamo/wp-content/themes/flatsome-child/functions.php on line 14

Czy coś z tym można zrobić? Jakiś wyjątek wprowadzić?

Gagan Media
Gość
Gagan Media

Ja rozwiązałem ten problem w inny sposób.
Ustawiłem Odbiór osobisty dla wysyłek w których klient ma dokonać przelewu, (ponazywałem tak jak było w płaskiej stawce, kurier 15 PLN itp), w tej opcji za pobraniem jest schowane. Wówczas nie ma możliwości jej wyboru.
Płaską stawkę dałem tylko dla wysyłek za pobraniem.

Sufity Napinane Pro-Finish
Gość
Sufity Napinane Pro-Finish

Na najnowszym woocommerce 3.1.2 działa bezbłędnie

kreatywny.online
Gość
kreatywny.online

Zmieniamy linijke:

$chosen_shipping_rates = WC()->session->get( ‚chosen_shipping_methods’ );

na:

$chosen_shipping_rates =(array) WC()->session->get( ‚chosen_shipping_methods’ );

I DZIAŁA.

Emil Pielaciński
Gość
Emil Pielaciński

czy ktoś powie dlaczego znika to nieszczęsne menu?

Mikichan Lecyk
Gość
Mikichan Lecyk

Mam problem pojawia mi się komunikat, wtedy osoba jest zalogowana Warning: in_array() expects parameter 2 to be array, null given in /home/klient.dhosting.pl/elegancki/elegancki.pl/public_html/wp-content/themes/xstore-child/functions.php on line 62 Warning: in_array() expects parameter 2 to be array, null given in /home/klient.dhosting.pl/elegancki/elegancki.pl/public_html/wp-content/themes/xstore-child/functions.php on line 65 Warning: in_array() expects parameter 2 to be array, null given in /home/klient.dhosting.pl/elegancki/elegancki.pl/public_html/wp-content/themes/xstore-child/functions.php on line 68 Warning: in_array() expects parameter 2 to be array, null given in /home/klient.dhosting.pl/elegancki/elegancki.pl/public_html/wp-content/themes/xstore-child/functions.php on line 71 Warning: in_array() expects parameter 2 to be array, null given in /home/klient.dhosting.pl/elegancki/elegancki.pl/public_html/wp-content/themes/xstore-child/functions.php on line 74 kod function my_custom_available_payment_gateways( $gateways ) { $chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get(… Czytaj więcej »

Kamil Ilcewicz-Kołodziejczyk
Gość
Kamil Ilcewicz-Kołodziejczyk

Cześć, niestety twój kod nie działa z Przelewami24, chcę na swoim sklepie mieć do wyboru tylko kurier opłacony i kurier pobranie, więc zmodyfikowałem twój kod na:
/**
* Filter payment gateways
*/
function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( ‚chosen_shipping_methods’ ) : array();

if ( in_array( ‚flat_rate:1’, $chosen_shipping_rates ) ) :
unset( $gateways[‚cod’] );

elseif ( in_array( ‚flat_rate:2’, $chosen_shipping_rates ) ) :
unset( $gateways[‚przelewy24’] );

endif;
return $gateways;
}
add_filter( ‚woocommerce_available_payment_gateways’, ‚my_custom_available_payment_gateways’ );

niestety nic to nie dało.
Pomożesz jakoś?

Paweł R. Stań
Gość
Paweł R. Stań

Dziękuję! Swoim wpisem idealnie rozwiązałeś mój problem.

Asqard
Gość
Asqard

Szkoda że przy próbie wywołania kodu dla woocommerce Wersja 3.3.4 konczy się białym ekranem w panelu admina szukałem rozwiązania ale jakiś trafem nie udało mi się

Paweł R. Stań
Gość
Paweł R. Stań

Drobna uwaga: kod pięknie działa na komputerze, ale w wersji responsywnej (na telefonie, https://prekognicja.pl/checkout/ ) pojawia się błąd:
po przejściu do kasy, w sekcji „Twoje zamówienie” system wyświetla błędy:

Warning: in_array() expects parameter 2 to be array, null given in /www/prekognicja/wp-content/plugins/my-custom-functions/inc/php/functional.php(85) : eval()’d code on line 7

Warning: in_array() expects parameter 2 to be array, null given in /www/prekognicja/wp-content/plugins/my-custom-functions/inc/php/functional.php(85) : eval()’d code on line 10

Warning: in_array() expects parameter 2 to be array, null given in /www/prekognicja/wp-content/plugins/my-custom-functions/inc/php/functional.php(85) : eval()’d code on line 13

Też tak macie? Ktoś wie, jak to naprawić?

Tomek
Gość
Tomek

Witam, Mam podobny problem z przelewami 24. Nie mogę ich usunąć dla płatności przy odbiorze oraz za pobraniem. A w kodzie na moje chłopskie oko jest wszystko dobrze. Ktoś może znalazł rozwiązanie? Może sam autor tego wpisu? Byłbym wdzięczny za pomoc. /** * Filter payment gateways */ function my_custom_available_payment_gateways( $gateways ) { $chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( ‚chosen_shipping_methods’ ) : array(); if ( in_array( ‚flat_rate:3’, $chosen_shipping_rates ) ) : unset( $gateways[‚cod’] ); elseif ( in_array( ‚flat_rate:5’, $chosen_shipping_rates ) ) : unset( $gateways[‚bacs’] ); elseif ( in_array( ‚flat_rate:5’, $chosen_shipping_rates ) ) : unset( $gateways[‚przelewy24’] ); elseif (… Czytaj więcej »

Paulina
Gość
Paulina

Made my day! Niedużo pracy a ile pieniędzy można zaoszczędzić. Jakby tak płacić za każdą wtyczkę do jakiegoś drobiazgu to by człowiek zbankrutował. Wielkie DZIĘKUJĘ 🙂

Dawid
Gość
Dawid

Dodałbym do artykułu informację, że nie zawsze np. ‚flat_rate:3′ będzie odpowiadał temu co mamy u siebie.
Aby sprawdzić co powinniśmy wprowadzić (chodzi głównie o cyfrę po flat_rate) najlepiej skorzystać z konsoli.
Czyli wchodzimy na stronę zamówienia, klikamy PPM (Prawym przyciskiem myszy) -> zbadaj.
Na zakreślonym elemencie szukamy id=’….’ i przepisujemy dany numer i podstawiamy w naszym kodzie (ten, który wrzucamy do functions.php).

Tomek
Gość
Tomek

Skrypt działa fajnie ukrywając przelew czy pobranie, ale gdy ukrywam klasę „paypal”, to jest ona dalej widoczna. Jedynie znika polskie tłumaczenie opisu przycisku. Spotkałeś się z tym?

Michał
Gość
Michał

Dziękuję.

Marcin
Gość
Marcin

Jaki jest identyfikatorów dla sposobów płatności przelewy 24

Mateusz
Gość
Mateusz

Ukrycie metody płatności przelewy24 nie jest możliwe tym sposobem. Nie działa z ID przelewy24 ani przelewy24_payment

elseif ( in_array( ‚flat_rate:2’, $chosen_shipping_rates ) ) :
unset( $gateways[‚przelewy24_payment’] );

Marcin
Gość
Marcin

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 6

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 9

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 12

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 15

Marcin
Gość
Marcin

Witam
Ten kod wyświetla mi się w Moje Konto.
Jak to naprawić ?

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 6

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 9

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 12

Warning: in_array() expects parameter 2 to be array, null given in /wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code on line 15

pozdrawiam

Wojciech
Gość
Wojciech

Działa jak talala, jestem laikiem ale dało radę w 3 godziny:) Powoli i dokładnie + czytanie ze zrozumieniem = sukces

Grzegorz
Gość
Grzegorz

Witam,

Używam tego kodu z powodzeniem na swoich stronach, super działa.
Ostatnio użyłem innego motywu i na podglądzie strony gdy jestem zalogowany jako administrator mam w polu menu wyświetlane ostrzeżenia związane z wklejonym kodem typu

Warning
: in_array() expects parameter 2 to be array, null given in
/home/gucio1/domains/domena.eu/public_html/wp-content/plugins/my-custom-functions/inc/php/functional.php(94) : eval()’d code

…….. i tak dalej dla wszyskich pozycji

Mam dodane { if(!is_admin()) ale ta funkcja nie działa.

function my_custom_available_payment_gateways( $gateways ) { if(!is_admin()) {
$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( ‚chosen_shipping_methods’ ) : array();

Ktoś ma pomysł jak wyłączyć te błędy w adminie?

Damon
Gość
Damon

Ja właśnie przed chwilą wstawiłem kod i wszystko pięknie działa. Nie wiem, czy będą jakieś inne błędy przez modyfikację tej funkcji, czas pokaże.

Chciałbym tylko napisać 2 ważne kwestie:
-Nie zawsze opcja cods to płatność przy odbiorze, a bacs to przelew. U mnie było na odwrót.
-Każdy rodzaj przesyłki może mieć inne oznaczenie flat_rate:x, niekoniecznie będzie to po kolei, jak w kodzie autora. Ja miałem po kolei 1,5,4,3 (4 rodzaje wysyłki)

Paweł
Gość
Paweł

Witam,

Powiedzcie mi proszę jak to wygląda kiedy klasa wysyłki ma być przypisana do płatności paypal i płatność z góry

Facebook - LH.pl

Page plugin Facebook nie działa poprawnie. Proszę włączyć śledzenie w ustawieniach przeglądarki.