Dzisiaj serwujemy modyfikację krok po kroku dla WooCommerce. Pokażemy w jaki sposób włączać / wyłączać metody płatności w zależności od wybranej metody dostawy.
Jest to dość podstawowe zagadnienie, które nie jest rozwiązane natywnie w WooCommerce, obecnie interfejs systemu sam z siebie nie umożliwia wyłączenia metody płatności dla metody dostawy. Wobec tego stoimy tutaj przed jakimś problemem (pokazywanie np. szybkich płatności dla metody dostawy za pobraniem jest naszym zdaniem problemem dużym – doprowadzającym do dezorientacji klienta w koszyku), który musimy rozwiązać.
Tradycyjnie można zainstalować płatną wtyczkę, która ten problem rozwiąże – udostępniając Ci interfejs aby to wyklikać. Niektóre interfejsy modułów płatności zostały też dozbrojone bezpośrednio w możliwość określenia dla których opcji dostawy mają być włączone.
Uniwersalną możliwością, działającą z każdą metodą płatności jest również darmowa modyfikacja, którą przedstawiamy poniżej.
Zaczynamy! Jak zawsze, proste modyfikacje w WooCommerce polegają na wrzuceniu odpowiedniej funkcji, która zmodyfikuje działanie systemu, modyfikacje umieszczamy w pliku functions.php naszego motywu.
Poniżej znajdziesz wzór funkcji, kod realizuje wyłączenie metody płatności w zależności od wybranej metody dostawy w checkoucie przez klienta:
add_filter( 'woocommerce_available_payment_gateways', 'disable_payment_when_shipping_is' );
function disable_payment_when_shipping_is ( $available_gateways ) {
if ( !is_admin() ) {
$shipping_get = WC()->session->get( 'chosen_shipping_methods' );
$shipping_is = $shipping_get[0];
if ( isset( $available_gateways['metoda_platnosci'] ) && 0 === strpos( $shipping_is, 'metoda_dostawy' ) ) {
unset( $available_gateways['metoda_platnosci'] );
}
}
return $available_gateways;
}
Pokusimy się o małą analizę powyższego kodu:
– po pierwsze korzystamy z hooka woocommerce_available_payment_gateways, który przez $available_gateways zwraca dostępne metody płatności w postaci tablicy,
– zmienna $shipping_get korzysta z dobroci WC()->session->get i zwraca nam tablicę chosen_shipping_methods,
– tablica z wybraną aktualnie przez klienta metoda dostawy – zmienna $shipping_is – szukamy klucza 0 w tablicy $shipping_get i zwracamy wartość pod tym kluczem – będzie to identyfikator aktualnie wybranej metody dostawy,
– jeśli w tablicy $available_gateways mamy metodę płatności, którą chcemy wyłączyć i jednocześnie $shipping_is zawiera ciąg znaków tożsamy z metodą dostawy dla której ma nastąpić wyłączenie – wówczas korzystamy z unset – odłączamy żądaną metodę płatności.
Jak zauważyłeś, w powyższym wzorze mamy metoda_platnosci oraz metoda_dostawy. Oczywiście łatwo domyśleć się co tam należy podstawić jednak musi być to zrozumiałe dla systemu czyli musimy posłużyć się identyfikatorami z WooCommerce.
Aby ustalić co podstawić za metoda_dostawy wystarczy wyświetlić sobie aktualną zawartość zmiennej $shipping_is. Wówczas zmieniając opcję dostawy pokaże się nam dokładnie 1:1 to co musimy podstawić do naszej funkcji.
Prosta funkcja do wklejenia w pliku functions.php, która wyświetli w koszyku identyfikator wybranej aktualnie metody dostawy znajduje się poniżej. Identyfikator jest wyświetlany tylko dla administratora.
add_action( 'woocommerce_cart_totals_after_order_total', 'show_shipping_is' );
function show_shipping_is ( ) {
if ( !is_admin() ) {
$shipping_get = WC()->session->get( 'chosen_shipping_methods' );
$shipping_is = $shipping_get[0];
}
if ( current_user_can( 'manage_options' ) ) {
print $shipping_is;
}
}
Pora na metoda_platnosci – w to miejsce oczywiście musimy podstawić identyfikator metody płatności w WooCommerce. Wystarczy wyświetlić sobie całą tablicę (np. na stronie koszyka) z wszystkimi włączonymi opcjami płatności i w bardzo prosty sposób ustalimy identyfikatory metod płatności w WooCommmerce bez konieczności zaglądania w każdą wtyczkę.
Oczywiście robimy to zapobiegając wyświetlania takiej informacji klientom – jak zwykle wyświetlamy informację tylko dla administratora.
Gotowiec do wklejenia w functions.php:
add_action( 'woocommerce_after_cart', 'futuroweb_show_payment_gateways' );
function futuroweb_show_payment_gateways ( ) {
$payment_gateways_all = WC()->payment_gateways->get_available_payment_gateways();
$payment_gateways_keys = array_keys($payment_gateways_all);
if ( current_user_can( 'manage_options' ) ) {
print_r($payment_gateways_keys);
}
}
Dla leniwych podajemy gotową tabelkę – nazwa metody płatności w WooCommerce i identyfikator metody płatności w WooCommerce – do podstawienia dla metoda_platnosci.
Opracowana przez nas tabelka zawiera wykaz popularnych metod płatności wraz z identyfikatorami z WooCommerce:
Nazwa metody płatności w WooCommerce |
Identyfikator metody płatności w WooCommerce (do podstawienia za metoda_platnosci) |
Przelew bankowy | bacs |
Płatność czekiem | cheque |
Za pobraniem | cod |
PayPal Standard | paypal |
paynow.pl – płatności Blikiem | pay_by_paynow_pl_blik |
paynow.pl – płatności przelewem internetowym | pay_by_paynow_pl_pbl |
paynow.pl – płatności kartą | pay_by_paynow_pl_card |
paynow.pl – płatności Google Pay | pay_by_paynow_pl_google_pay |
imoje – BLIK | imoje_blik |
imoje | imoje |
imoje – Twisto | imoje_twisto |
imoje – karty | imoje_cards |
Przelewy24 | przelewy24 |
CashBill | cashbill_basic_payment |
CashBill (BLIK) | cashbill_blik_payment |
CashBill (PayPal) | cashbill_paypal_payment |
CashBill (PAYSAFECARD) | cashbill_paysafecard_payment |
CashBill (Raty) | cashbill_aliorraty_payment |
CashBill (Karty Płatnicze) | cashbill_paymentocc_payment |
PayU – karta kredytowa | payucreditcard |
PayU – lista banków | payulistbanks |
PayU – standard | payustandard |
PayU – secure form | payusecureform |
PayU – Blik | payublik |
PayU – raty | payuinstallments |
Tpay credit cards | tpaycards |
Tpay | transferuj |
Stripe | stripe |
Stripe P24 | stripe_p24 |
eRaty Santander Consumer Bank | eraty |
PŁATNOŚCI DOTPAY – One Click (karty płatnicze) | Dotpay_oc |
PŁATNOŚCI DOTPAY – Karty płatnicze | Dotpay_pv |
PŁATNOŚCI DOTPAY – Karty płatnicze (Dotpay) | Dotpay_cc |
PŁATNOŚCI DOTPAY – BLIK (Dotpay) | Dotpay_blik |
PŁATNOŚCI DOTPAY – Dotpay (szybkie płatności) | dotpay |
PŁATNOŚCI DOTPAY – MasterPass (Dotpay) | Dotpay_mp |
PŁATNOŚCI DOTPAY – PayPo (płatności odroczone) | Dotpay_paypo |
Gotowy przykład z podstawionymi metoda_platnosci i metoda_dostawy znajdziesz poniżej.
W tym przypadku odłączamy płatność za pobraniem (cod) dla przewoźnika kurier przedpłata (u nas – flat_rate:1) i odwrotnie dla przewoźnika kurier pobranie (u nas flat_rate:2) odłączamy płatność zwykłym przelewem bankowym (bacs).
add_filter( 'woocommerce_available_payment_gateways', 'disable_payment_when_shipping_is' );
function disable_payment_when_shipping_is ( $available_gateways ) {
if ( !is_admin() ) {
$shipping_get = WC()->session->get( 'chosen_shipping_methods' );
$shipping_is = $shipping_get[0];
if ( isset( $available_gateways['cod'] ) && 0 === strpos( $shipping_is, 'flat_rate:1' ) ) {
unset( $available_gateways['cod'] );
}
if ( isset( $available_gateways['bacs'] ) && 0 === strpos( $shipping_is, 'flat_rate:2' ) ) {
unset( $available_gateways['bacs'] );
}
}
return $available_gateways;
}
To wszystko!
Mamy nadzieję, że odłączanie metod płatności od wybranych metod dostawy nie będzie już stanowiło dla Ciebie żadnego problemu. Stosując powyższe rozwiązania jest to banalnie proste!