Płatności w zależności od metody dostawy w WooCommerce. Jak przypisać metodę dostawy do sposobu płatności w WooCommerce? Darmowa modyfikacja krok po kroku.

Płatności w zależności od metody dostawy w WooCommerce. Jak przypisać metodę dostawy do sposobu płatności w WooCommerce? Darmowa modyfikacja krok po kroku.

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

Wyświetlenie na stronie koszyka identyfikatora wybranej aktualnie metody dostawy (u nas flat_rate:2)

 

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

Wyświetlamy tablicę z identyfikatorami włączonych metod płatności



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!

Przewiń do góry