WooCommerce fizetési mód kikapcsolása megadott szállítási opció esetén

[Ezt a cikket 3 perc elolvasni.]

Egy WooCommerce webshop munkálatai során azt a feladatot kaptam, hogy tiltsak le egy bizonyos fizetési módot abban az esetben, ha a vásárló egy megadott szállítási opciót választ. Példának okáért tehát jelen esetben ha a vásárló GLS Csomagpontot választ ki, akkor a cél az, hogy ne jelenjen meg a készpénzes fizetés, mert ugye ebben az esetben ez teljesen okafogyottá válik. Marad tehát az utánvét, ami ehhez a szállítási módhoz passzoló fizetési forma.

Sajnos beépített opció nincs a fenti kérés megvalósítására, de mint ahogy szinte mindenhez, úgy ennek a kivitelezéséhez is létezik egy egyszerű és jól működő kódrészlet, amit rögtön be is mutatok.

Természetesen a megszokott módon ez is az aktív sablonunk functions.php fájljának végére kell, hogy kerüljön:

add_filter( 'woocommerce_available_payment_gateways', 'x34fg_gateway_disable_shipping' );

function x34fg_gateway_disable_shipping( $available_gateways ) {

    global $woocommerce;

    if ( !is_admin() ) {

        $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );

        $chosen_shipping = $chosen_methods[0];

        if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'wc_pont_shipping_method:5' ) ) {
            unset( $available_gateways['cheque'] );
        }

    }

return $available_gateways;

}

A kód végén lévő lenti szekció a lényeges, itt szükséges csak módosításokat végrehajtanunk:

if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'wc_pont_shipping_method:5' ) ) {
            unset( $available_gateways['cheque'] );

A “cheque” helyére kerül annak a fizetési módnak az azonosítója, amit le szeretnénk tiltani. A fenti példában a “cheque” a készpénzes fizetés azonosítója. Ezt mind a két helyen át kell írnunk. Az utánvétes fizetési mód azonosítója a “cod” (mint “cash-on-delivery”), a banki átutalás pedig a “bacs” (mint “bank account clearing system”). Egyéb utólagos vagy bővítmény által hozzáadott fizetési módoknál nekünk kell kideríteni az azonosítót.

Szükséges még módosítani a szállítási módot is, amelynél ki akarjuk kapcsolni a megadott fizetési módot. Ez a fenti példában a “wc_pont_shipping_method:5”, ami a Pont plugin GLS Csomagpont szállítási módjának az ID-je. De ha ehelyett személyes átvételt szeretnénk megadni, akkor ide a “local_pickup”-ot kell írnunk, mint azonosító.

A kód tehát először is megnézi, hogy elérhető-e a megadott fizetési mód, majd ha igen, akkor ellenőrzi, hogy a vásárló kiválasztotta-e a beírt szállítási módot. Ha ez is teljesül, akkor letiltja a megadott fizetési módot a beállított szállítási mód esetén, de csak ott.

Ha tetszik, mutasd meg másoknak is: