WooCommerce: fizetési módok elrejtése szállítási mód függvényében

Szállítási és fizetési módok kombinálásánál szükség lehet rá, hogy bizonyos szállítási módok esetén csak a lehetséges fizetési mód(ok) jelenjenek meg a kosár oldalon.

Egyik munkám során felmerülő konkrét példa – amikor egy utánvétes szállítást választ a vevő – akkor ne jelenjen meg átutalásos vagy bankkártyás fizetési mód, hanem csak az utánvétes lehetőség. Sajnos ez a Woocommerce fizetési módoknál alapból nem kezelhető.

szallitas fizetes elotte weboldal készítés Szeged

A megoldás egy rövid kódrészlet amit az aktív sablonunkban a functions.php fájl végére bemásolva a szükségtelen fizetési módok kikapcsolhatók.

Természetesen a módosítás előtt készítsünk biztonsági másolatot oldalunkról és mindenki saját felelősségére használja a leírtkat!


/** disable payment method*/

add_filter( 'woocommerce_available_payment_gateways', 'cs_gateway_disable_shippi

function cs_gateway_disable_shipping( $available_gateways ) {

global $woocommerce;

if ( !is_admin() ) {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );

    $chosen_shipping = $chosen_methods[0];

    //GLS
    if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'flat_rate:5' ) ) {
        unset( $available_gateways['cheque'] );
    }
    //foxpost csomag
    if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'foxpost_woo_parcel_apt_shipping:10' ) ) {
        unset( $available_gateways['cheque'] );
    }

    //foxpost csomag utanvet 

    if ( isset( $available_gateways['cheque'] ) && 0 === strpos( $chosen_shipping, 'foxpost_woo_parcel_apt_shipping:8' ) ) {
        unset( $available_gateways['cheque'] );
    }
    if ( isset( $available_gateways['bacs'] ) && 0 === strpos( $chosen_shipping, 'foxpost_woo_parcel_apt_shipping:8' ) ) {
        unset( $available_gateways['bacs'] );
    }
    if ( isset( $available_gateways['barion'] ) && 0 === strpos( $chosen_shipping, 'foxpost_woo_parcel_apt_shipping:8' ) ) {
        unset( $available_gateways['barion'] );
    } 
} 
return $available_gateways; 

}

A kiválasztott fizetési módra a foxpost csomag utanvet utáni kód vonatkozik, itt kikapcsoljuk a “cheque” (készpénz), “bacs” (banki átutalás) és “barion” bankkártyás fizetési módokat.

Az eredmény:

szallitas fizetes utana weboldal készítés Szeged

Persze felmerül a kérdés, hogy honnan tudjuk a fizetési és szállítási módok kódjait/megnevezéseit. Az előzőek kis keresgélés után kideríthetők, a szállítási módok viszont mindig a woocommerce beállításai során “keletkeznek”. Szerencsére egy-egy rövid kód ideiglenes beszúrása után ezeket meg tudjuk jeleníteni a kosár oldalunk tetején.

Erre a következő módszert találtam, melyet szintén a functions.php -ba ideiglenesen beillesztve, a kosár oldalon az adott szállítási módot kiválasztva a szállítási mód kódja megjeníthető. (Az oldalt frissíteni kell ha másik módot vásztunk ki. )

// Get Current Shipping Method WooCommerce
 
add_action('wp_head', 'get_current_shipping_method');
 
    function get_current_shipping_method(){
 
        $current_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
        print('<pre>');
        print_r( $current_shipping_method );
        print('</pre>');
}

Az eredmény (frissítés után ez jelenik meg az oldalunk tetején):

Array
(
    [0] => foxpost_woo_parcel_apt_shipping:8
)

Amennyiben kíváncsiak vagyunk a beállított fizetési módokra a következő kódot szintén a functions.php -ba bemásolva ezeket is ki tudjuk listáztatni.

//get payment methods

add_action('wp_head', 'get_payments');
    function get_payments(){
        echo "<h6>Payment Gateways</h6>";
        foreach ( WC()->payment_gateways->payment_gateways() as $payment_gateway_id => $payment_gateway_item ) {
        echo "Payment gateway '" . $payment_gateway_item->title . "' has id '" .$payment_gateway_id . "'<br>";
        }    
    }

Nálam jelen esetben ezek voltak beállítva:

Payment Gateways
Payment gateway 'Közvetlen banki átutalás' has id 'bacs'
Payment gateway 'Készpénzes fizetés személyes átvételkor' has id 'cheque'
Payment gateway 'Utánvétes fizetés' has id 'cod'
Payment gateway 'Barion' has id 'barion'

A fenti leírással egyetlen egy probléma van, mégpedig az, hogy a functions.php fájl mindig az adott beállított témahoz kapcsolódik, tehát új téma esetén – sőt a jelenlegi téma frissítésekor is – a kódot újra be kell illesztenünk… Ahhoz, hogy ezt elkerüljük több megoldás is van. Természetesen, mint szinte mindenre, erre is van plugin ami megteszi helyettünk, viszont a legjobb ha saját magunk hozunk létre egy plugint… De ennek módjáról majd egy következő bejegyzésben olvashatsz.

Ha teszett és hasznosnak találtad akkor kérlek kedveld a Facebook oldalamat és segítsd, hogy minél több emberhez eljuthassak. 

Tetszett ez a cikk?

Share on Facebook
Share on Pinterest
Scroll to Top