Ukrycie płatności dla danej metody wysyłki w WooCommerce
Domyślnie WooCommerce nie ma niestety opcji, która pozwalałaby płynnie dobierać rodzaj płatności do wysyłki, czyli w praktyce np. wyłączać opcje płatności przy wysyłce za pobraniem. Możemy jednak użyć prostego kodu, aby to skonfigurować. Instrukcję zamieszczamy poniżej. Prosimy o dokładne zapoznanie się z treścią, a przed wprowadzeniem modyfikacji wykonanie snapshota.
Uwaga! Musimy posiadać motyw potomny, aby wprowadzone zmiany zostały zachowane bezwzględu na późniejsze modyfikacje.
Opis elementów kodu
Nim przejdziemy do kopiowania i wklejania, poznajmy jak działa kod. Przede wszystkim zawiera on identyfikatory wysyłek oraz płatności:
Identyfikatory wysyłek używane przez WooCommerce:
flat_rate – płaska stawka
local_pickup – odbiór osobisty
free_shipping – darmowa dostawa
Numery występujące po danej metodzie płatności np. flat_rate: 1 określają kolejność danej metody wysyłki na liście w ustawieniach wysyłek. Flate_rate:1 to wysyłka kurierska, flate_rate:2 to wysyłka kurierska za pobraniem.
Identyfikatory płatności:
- cod – płatność przy odbiorze
- bacs – płatność zwykłym przelewem
- cheque – płatność czekiem
- paypal – płatność PayPalem
Kod do wklejania
Jak przeanalizujemy kod, wg wyżej wymienionych reguł, zauważymy, że dla opcji flare_rate:2 jest wyłączona opcja bacs – czyli płatność przelewem. Dzięki temu kupujący zobaczy tylko płatność przy odbiorze. Oczywiście kolejności pozycji musi zgadzać się z tymi w naszym sklepie.
/**
* 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'] );
endif;
return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );
Skrypt ten należy umieścić w pliku „functions.php”, który znajduje się w katalogu z aktualnie działającym motywem. Ważne jest, aby był to katalog z motywem potomnym czyli child theme. Pamiętajmy, aby jednocześnie włączyć opcję wysyłki za pobraniem w ustawienia WooCommerce. Inaczej nasz skrypt nie zadziała prawidłowo.
lepiej dodać warunek, aby unikną błędów przy wejściu do kokpitu:
if ( !is_admin() ) add_filter( ’woocommerce_available_payment_gateways’, ’my_custom_available_payment_gateways’ );
Dziękujemy za info. Być może w przypadku jakieś wtyczki do płatności konieczne będzie zastosowania takiego obejścia w przypadku problemów, jednak w większości działa rozwiązanie podane w artykule.
ostatnio w jednym ze sklepow na woodmarcie.. ten kod generuje blad w REST API.. nie rozumiem czemu, wykomentowanie zwraca rest API.. wordpress nie zwraca zadnych błędów w logach, apache tez.. czy komuś to się też trafiło???