【问题标题】:Remove payment gateway if specific product is in the cart (Woocommerce)如果特定产品在购物车中,则删除支付网关 (Woocommerce)
【发布时间】:2014-09-27 23:31:14
【问题描述】:

在我的 Woocommerce 设置中,我有两个支付网关。如果购物车中有特定产品(id = 1187),我想显示gateway_2 并隐藏gateway_1。如果该产品不在购物车中,则显示“gateway_1”并隐藏gateway_2

如果我先添加产品 1187,则以下代码有效。但是,如果我首先添加一个不是“1187”的产品,那么无论如何它都会显示gateway_1。如何修改此代码,以便无论如何,如果 ID 1187 在购物车中,则只显示gateway_2

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

function filter_gateways($gateways){
global $woocommerce;

foreach ($woocommerce->cart->cart_contents as $key => $values ) {

//store product id's in array
$specialItem = array(1187);         

if(in_array($values['product_id'],$specialItem)){   
      unset($gateways['gateway_1']);
      break;
}
else {
    unset($gateways['gateway_2']);
    break;
}

}
return $gateways;
}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    你的代码的问题是你break循环,不管条件如何。

    可能的修复:

    $inarray = false;
    $specialItem = array(1187);
    foreach ($woocommerce->cart->cart_contents as $key => $values ) {//enumerate over all cart contents
        if(in_array($values['product_id'],$specialItem)){//if special item is in it
            $inarray = true;//set inarray to true
            break;//optional, but will improve speed.
        }
    }
    
    if($inarray) {//product is in the cart
          unset($gateways['gateway_1']);
    } else {//otherwise
        unset($gateways['gateway_2']);
    }
    return $gateways;
    

    【讨论】:

    • 谢谢!我尝试了这段代码,但它产生了以下错误:“致命错误:无法在第 300 行中断/继续 1 级”,这是第一个 break
    • 抱歉,if 中的中断应该被删除(并且可以选择在foreach 中的if 中添加。
    猜你喜欢
    • 2016-12-13
    • 2020-11-15
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多