5

在这个 woocommerce 设置中,我有 2 种付款方式,PaypalCash on Delivery

现在如何仅针对某些邮政编码隐藏/禁用货到付款。

这是我在 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' );

要点链接

4

3 回答 3

7

要禁用/隐藏“货到付款”,请将此代码放在主题的 function.php 中。

有关更多详细信息: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' );
于 2013-06-12T13:14:41.347 回答
0

在“结帐页面”中,用户可以有两个地址——账单地址和发货地址。

为了仅在已填满的情况下更改 Shipping one 时才能正常工作,我更改了一些代码。如果设置了运输国家代码,您必须测试它,如果不只是用户国家代码:

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' );
于 2014-12-01T20:53:28.670 回答
0

在上面的代码中,您使用国家代码来禁用支付网关,但您提到您希望通过邮政编码来执行此操作。

你是对的 using woocommerce_available_payment_gateways,但不是使用$woocommerce->customer->get_country()你必须使用WC()->customer->get_shipping_postcode()(或WC()->customer->get_billing_postcode()在某些情况下)。

您提到了 PayPal 和货到付款支付网关,我们需要他们的 ID,有paypal相应的cod

在下面的代码中,让我们为几个邮政编码停用货到付款,例如“1234”和“5678”:

add_filter( 'woocommerce_available_payment_gateways', function( $available_gateways ) {
    
    // if Cash on Delivery is already disabled, let's exit the function
    if( empty( $available_gateways['cod'] ) ) {
        return $available_gateways['cod'];
    }

    // get postal code
    $postal_code = WC()->customer->get_billing_postcode();

    // deactivate payment method
    if( in_array( $postal_code, array( '1234', '5678' ) ) ) {
        unset(  $available_gateways['cod'] );
    }
        
    return $available_gateways;

} );

可以将代码插入到您当前的主题 functions.php 文件或自定义插件中。您可以在本教程中找到更多信息:https ://rudrastyh.com/woocommerce/hide-payment-methods-based-on-postal-code.html

于 2021-11-22T13:09:40.560 回答