首页 文章

仅针对可下载项目和特定发货国家/地区的未设置付款方式[关闭]

提问于
浏览
1

我的电子商务网站向南非人出售99%,我们使用"BACS" "EFT"和信用卡作为付款方式 .
我们接受国际订单,但无法自动计算国际订单的运费 .

因此,当订单是国际(而非南非)时,我们希望用户选择BACS / EFT付款选项 . 我们要求他们挂10付款,以便我们先确认运费 .

但如果国际订单仅包含可下载的产品(因此不需要发货),那么我们希望提供信用卡付款选项 .

Website Link

我试图在结帐页面上取消设置一个名为'mygate'的付款方式,如果这两个都是真的:

  • 购物车仅包含可下载的产品 .

  • 送货地址不是南非(ZA)

我到了那里,但需要一些帮助 .

To disable payment gateway for all countries except South Africa:

function payment_gateway_disable_country( $available_gateways ) {
    global $woocommerce;
    if ( isset( $available_gateways['mygate'] ) && $woocommerce->customer->get_country() <> 'ZA' ) {
        unset(  $available_gateways['mygate'] );
    } 
    return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );

And to check whether the product is downloadable; something todo with:

if( ! $product->is_downloadable() )

1 回答

  • 1

    这可以通过foreach循环来完成,我们将检查是否所有产品都是可下载的 . 在这种情况下,也需要用 get_shipping_country() 方法替换 get_country() .

    这是您重新访问的代码:

    add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country', 20, 1 );
    function payment_gateway_disable_country( $available_gateways ) {
        $only_downloadable_products = true;
    
        // Loop through cart items looking for non downloadable products
        foreach( WC()->cart->get_cart() as $cart_item ){
            if( ! $cart_item['data']->is_downloadable() ){
                $only_downloadable_products = false; // Non downloadable found
                break; // Stop the loop
            }
        }
    
        if( isset( $available_gateways['mygate'] ) 
        && WC()->customer->get_shipping_country() != 'ZA' // <= Changed
        && $only_downloadable_products ) { // <= Added
            unset( $available_gateways['mygate'] );
        } 
        return $available_gateways;
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 .

    经过测试,并且应该可以使用正确的支付网关ID替换 'mygate' .

相关问题