仅针对可下载项目和特定运输国家/地区的未设置付款方式

时间:2018-01-24 20:43:58

标签: php wordpress woocommerce payment-gateway shipping

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

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

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

Website Link

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

  1. 购物车仅包含可下载的商品。
  2. 送货地址不是南非(ZA)
  3. 我到了那里,但需要一些帮助。

    禁用除南非以外的所有国家/地区的付款网关:

    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' );
    

    检查产品是否可下载; todo with:

    if( ! $product->is_downloadable() )
    

1 个答案:

答案 0 :(得分:1)

这可以通过foreach循环完成,我们将检查所有产品是否可下载。在这种情况下,还需要使用get_country()方法替换“{1}}”。

以下是您重新访问的代码:

get_shipping_country()

代码进入活动子主题(或活动主题)的function.php文件。

经过测试,并且应该可以使用正确的支付网关ID替换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; }