如何根据 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>';
}
}
在那之后,我不知道你在哪里使用这段代码,或者你是否在钩子函数中使用它,所以我只能帮上忙了……
我在同一个网站的不同餐厅工作。不同的餐厅有不同的菜单。但条件是一个人最多只能在一家餐厅点餐。因此,如果假设他进入 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
incart_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>';
}
}
在那之后,我不知道你在哪里使用这段代码,或者你是否在钩子函数中使用它,所以我只能帮上忙了……