有条理地隐藏可用的支付网关

在WooCommerce中,我有 specific product 由于法律原因无法在线支付,但可以通过COD订购 .

specific product 在购物车中时,我已经编写了一个自定义挂钩功能来隐藏付款表单(Inspire Commerce信用卡付款) .

当我回显 $available_gateways 时,我在数组中看到两个选项,'cod'和'inspire' - 但是当我用我的代码隐藏 Inspire 时,两个网关都消失了,我收到此错误消息:

抱歉,您的州似乎没有可用的付款方式 . 如果您需要帮助或希望作出其他安排,请与我们联系 .

为什么我不能只有COD的任何想法?

这是我的功能代码:

function dfg_hide_payment_form($available_gateways) {
    if ($_customer['dfg-pay-later-enabled'] == 1) {
        if( is_checkout() ) {  
            global $woocommerce, $_customer;
            $packages = $_customer['dfg-package-ids'];

            foreach ($packages as $package) {
                if (gs_woo_in_cart($package)) {
                    unset($available_gateways['inspire']);
                }
            }
        }
    } else {
        unset($available_gateways['cod']);
    }
}

add_filter('woocommerce_available_payment_gateways', 'dfg_hide_payment_form', 1);

谢谢

回答(2)

2 years ago

我在这个答案中使用了一种购物车迭代方式,以检查您的特定产品是否在购物车中 . 如果产品在购物车中,我取消设置'inspire'支付网关 (Replaced a wrong variable name) .

这是这段代码:

add_filter('woocommerce_available_payment_gateways', 'conditional_hiding_payment_gateway', 1, 1);
function conditional_hiding_payment_gateway($available_gateways) {
    global $_customer;
    if ($_customer['dfg-pay-later-enabled'] == 1) {
        // HERE set your specific product ID
        $specific_product = 295;

        $is_in_cart = false;

        // Iterating through each items in cart
        foreach(WC()->cart->get_cart() as $cart_item){
            if($cart_item['product_id'] == $specific_product){
                $is_in_cart = true;
                break;
            }
        }
        if($is_in_cart)
            unset($available_gateways['inspire']);
    } else {
        unset($available_gateways['cod']);
    }
    return $available_gateways;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中 .

此代码未经测试,但它应该工作...

2 years ago

我在函数结束时错过了一个return语句 .

return $available_gateways;