如何在woocommerce中禁用基于客户IP的付款选项

我在印度有一家woocommerce商店,也有欧洲和美国的交易 . 所以我想根据客户IP禁用付款选项 . 我启用了Payumoney(印度)和Paypal(其他国家/地区)的两种付款方式 . 我正在使用基于结算国家/地区禁用所选付款选项的代码段 .

function payment_gateway_disable_country( $available_gateways ) {global $woocommerce;
if ( isset( $available_gateways['pumcp'] ) && $woocommerce->customer->get_country() <> 'IN' ) {
unset( $available_gateways['pumcp'] );
} 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' );

现在这个片段的问题是,如果有人从美国订购并选择送货地址到印度 . 然后他们必须选择PayUmoney作为付款选项 . 而现在国际支付的PayUmoney便利费约为10% . 反之亦然 . 是的,我知道此代码段与帐单邮寄地址一起使用 . 因此,客户将根据美国的帐单地址和到印度的送货地址 . 但有时客户填写的帐单地址与送货地址相同 . 然后,此代码段会导致问题 . 所以我想改变基于IP的支付选项 .
Thanx提前 .

回答(1)

2 years ago

基于IP的国家/地区无法解决您的问题...相反,您应该使用 the customer shipping country 而不是结算国家/地区 . 使用 global $woocommerce;$woocommerce->customer 也已过时,已被 WC()->customer 取代 .

所以你重新访问的代码将是:

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country', 20, 1 );
function payment_gateway_disable_country( $available_gateways ) {
    if ( isset( $available_gateways['pumcp'] ) && WC()->customer->get_shipping_country() <> 'IN' ) {
        unset( $available_gateways['pumcp'] );
    } else if ( isset( $available_gateways['paypal'] ) && WC()->customer->get_country() == 'IN' ) {
        unset( $available_gateways['paypal'] );
    }
    return $available_gateways;
}

代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 . 这应该可以解决你的问题......