# Flexible Shipping &#8211; Uzależnienie metody płatności od&nbsp;formy dostawy

Przy tworzeniu jednego z projektów, wymagane było użycie wtyczki *WP Desk Flexible Shipping dla WooCommerce* w bezpłatnej wersji, aby zintegrować WordPress z serwisem Furgonetka.pl.

Przy testowaniu integracji pojawił się problem, który powodował wyświetlanie się dla przesyłek za pobraniem, innych form płatności np. przelewu na konto oraz TPay.com.

Bezpłatna wersja wspiera wyświetlanie warunkowe form płatności, ale nie pozwala na wybór konkretnych form dostawy i uzależnienie od nich wyświetlanych dla klienta płatności.

Dlatego użyłem znanego już mi wcześniej snippetu z bloga [jeroensormani.com](https://jeroensormani.com/enable-disable-payment-gateways-for-specific-shipping-methods/), a jedyny problem jako pozostał to ustalenie jakie ID mają poszczególne ustawienia i strefy wysyłki – co jest wymagane do użycia tego kodu.

## **Usunięcie metody płatności w zależności od wybranego sposobu i typu dostawy w WooCommerce **

W dzisiejszym wpisie pokaże jak wyłączyć w bezpłatnej wersji wtyczki *[Flexible Shipping dla WooCommerce](https://pl.wordpress.org/plugins/flexible-shipping/)** *metody płatności od wybranej formy dostawy i ukryć np. płatność online dla przesyłek za pobraniem, a dla przesyłek standardowych ukryć opcję płatności przy odbiorze.

Najpierw spójrzmy na standardowy kod, który umożliwia ukrywanie wybranych płatności:

https://gist.github.com/JeroenSormani/4115f614a43eeab8982c

Jak widać na tym przykładzie – jeżeli klient wybierze odbiór osobisty (id: *local_delivery*), opcja płatności przelewem (id: *bacs*) ma być niedostępna.

W przypadku standardowej integracji – id poszczególnych form dostawy, można znaleźć w dokumentacji WooCommerce, a płatności można po prostu skopiować z adresu URL w panelu opcji danej formy dostawy lub płatności.

*

Niestety w przypadku darmowej wersji wspomnianej wtyczki – ani w dokumentacji, aby w panelu, ani nawet na forum pomocy nie odnalazłem rozwiązania mojego problemu, a więc musiałem metodą prób i błędów odnaleźć właściwy.

Poniżej przykładowy adres jednej z form dostawy na ekranie jej edycji – Kuriera z Przedpłatą:

![](https://jaworowi.cz/wp-content/uploads/2018/07/flexible-shipping-warunkowe-metody-platnosci.png)

W przypadku tej metody dostawy, należało wyłączyć płatność za pobraniem (id: cod*).

## **Tworzenie ID metody dostawy**

W powyższym linku mamy dwa identyfikatory: **instance_id** oraz **method_id** i na ich podstawie tworzy się unikalny identyfikator dla metody dostawy **flexible_shipping_****2****_****1**, możesz je też zobaczyć w źródle strony, poprzez konsolę deweloperską lub opcji „zbadaj element”. 

![](https://jaworowi.cz/wp-content/uploads/2018/07/woocommerce-metody-dostawy-platnosci-2.png)

I tak tworzysz (lub odnajdujesz) identyfikatory dla poszczególnych metod dostawy, a kiedy już je masz możesz przejść do modyfikowania snippeta pokazanego powyżej :) .

Poniżej pełen kod, który za chwilę omówimy:

`function my_custom_available_payment_gateways( $gateways ) {`
`	$chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );`
`	if ( in_array( 'flexible_shipping_2_1', $chosen_shipping_rates ) ) :`
`		unset( $gateways['cod'] );`
`		endif;`
`	if ( in_array( 'flexible_shipping_3_5', $chosen_shipping_rates ) ) :`
`		unset( $gateways['bacs'] );`
`		unset( $gateways['transferuj'] );`
`	endif;`
`	return $gateways;`
`}`

`add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );`

A więc w powyższym przykładzie mamy dwie formy dostawy:

- Kurier z przedpłatą – flexible_shipping_2_1,

- Kurier za pobraniem – flexible_shipping_3_5

Logiczne więc, że musimy:

- Dla kuriera z przedpłatą wyłączyć opcje za pobraniem,

- Dla płatności przy odbiorze wyłączyć TPay.com oraz płatność przelewem.

I to właśnie robi ten kod – w 3 linijce znajduje się wyłączenie opcji płatności przy odbiorze, a w 6 wyłączenie przedpłaty.

**Jak dodać ten kod do WordPress?**

Kod ten dodaj do motywu w pliku functions.php, najlepiej [motywu potomnego](https://jaworowi.cz/jak-zainstalowac-motyw-potomny-child-theme-w-wordpress-3559.php) lub własnej [wtyczki funkcyjnej](https://jaworowi.cz/wlasne-kody-wordpress-16834.php#Niestandardowa_wtyczka_funkcyjna). Przed „?>” na końcu pliku (może tego fragmentu nie być i wtedy po prostu na końcu). Więcej szczegółów w artykule: [Własny kod w WordPress](https://jaworowi.cz/wlasne-kody-wordpress-16834.php).

Jak działa w praktyce możesz zobaczyć na stronie projektu – **[Natula.pl Odzież dla kobiet z lnu](https://natula.pl/)**.
