How to Hide Payment Method in Woocommerce based on

2019-02-13 20:23发布

问题:

In this woocommerce setup, I have 2 Payment methods, Paypal and Cash on Delivery.

Now how can Cash on Delivery be hidden/disabled for certain Postal codes only.

This is the code I found on Gist

//  Disable gateway based on country
function payment_gateway_disable_country( $available_gateways ) {
    global $woocommerce;
    if ( isset( $available_gateways['ccavenue'] ) && $woocommerce->customer->get_country() <> 'IN' ) {
        unset(  $available_gateways['ccavenue'] );
    } else if ( isset( $available_gateways['paypal'] ) && $woocommerce->customer->get_country() == 'IN' ) {
        unset( $available_gateways['paypal'] );
    }
    return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );

Gist Link

回答1:

To disable/hidden "Cash on Delivery", Place this code in your theme's function.php .

For more detail: woocommerce-hide-payment-gatway-based-on-visitors-country

//  Disable gateway based on country
function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( isset( $available_gateways['cod'] ) && $woocommerce->customer->get_country() <> 'IN' ) {
    unset(  $available_gateways['cod'] );
}
return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );


回答2:

In the "checkout page" user can have two addresses - billing and shipping one.

To work correctly only with changes of Shipping one if it's filled I changed a bit the code. You have to test shipping countrycode if it's set, if not just user countrycode:

function payment_gateway_disable_country( $available_gateways ) {
    global $woocommerce;
    $country = !empty($woocommerce->customer->get_shipping_country()) ? $woocommerce->customer->get_shipping_country() : $woocommerce->customer->get_country();
    if ( isset( $available_gateways['cod'] ) && $country <> 'CZ' ) {
        unset(  $available_gateways['cod'] );
    }
    return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );