如何根据 Woocommerce 中的条件从购物车中删除商品

How to remove an item from cart based on condition in Woocommerce

我在同一个网站的不同餐厅工作。不同的餐厅有不同的菜单。但条件是一个人最多只能在一家餐厅点餐。因此,如果假设他进入 KFC restaurant 并订购了一件商品,那么他决定不从 KFC 拿走食物,然后去 Macdonalds page.And 订购了 6 件商品。

现在购物车中有 7 件商品(一件来自 KFC,另外 6 件来自 MADONALDS)。但由于条件是,一个人最多只能从 1 家餐厅点餐,所以我需要删除从 KFC Restaurant.

添加的菜单

为了简化这项任务,我在 woocommerce cart_item_data 中引入了 restaurant_id 参数。所以我有两件事让它变得更容易-

(1) $current_restaurant_id - Current Restaurant id (on which page i/you are currently staying)
AND
(2) restaurant_id in cart_item_data;

快完成了,但最后一刻出现了问题:

我的代码在这里:

global $woocommerce;
$items = $woocommerce->cart->get_cart();
$current_restaurant_id = get_the_ID();
foreach($items as $item => $values) { 
    if($current_restaurant_id !== $values['restaurant_id']){
        WC()->cart->remove_cart_item($values['product_id']);
    }else{
        $_product = $values['data']->post; 
        $price = get_post_meta($values['product_id'] , '_price', true);
        $output = '<li class="clearfix">';
        $output .= '<span class="pull-left">'. $_product->post_title .' ('. $values['quantity'] . ') ' . $values['restaurant_id'] . '</span>';
        $output .= '<span class="pull-right text-spl-color">'. $price*$values['quantity'] .'</span>';
        $output .= '</li>';
        echo $output;
    }
}

购物车上没有显示任何东西,但商品在购物车中。没有项目被删除。

这是 WooCommerce 购物车对象的正确代码……要从购物车中删除商品,您必须使用键,而不是值……我唯一无法测试的是您的 "restaurant_id"。所有其他代码都经过测试且功能齐全。

这是这段代码:

$current_restaurant_id = get_the_ID();
foreach(WC()->cart->get_cart() as $key => $item) {
    $item_id = $item['product_id']; // the product ID
    $variation_id = $item['variation_id']; // if is a variable product, this is going to be > 0
    $item_price = $item['data']->price; // the price of the product
    if($current_restaurant_id !== $item['restaurant_id'])
    {
        WC()->cart->remove_cart_item($key);
    }
    else
    {
        echo '<li class="clearfix">
        <span class="pull-left">'. $item['data']->post->post_title .' ('. $item['quantity'] . ') ' . $item['restaurant_id'] . '</span>
        <span class="pull-right text-spl-color">'. $item['line_total'] .'</span>
        </li>';
    }
}

在那之后,我不知道你在哪里使用这段代码,或者你是否在钩子函数中使用它,所以我只能帮上忙了……