WooCommerce添加指定ID商品时清空购物车的实现方法
实现方法
woocommerce_add_cart_item_data钩子默认支持传入3个参数,你原有代码只声明了第一个参数,没有接收代表当前加购商品ID的第二个参数,所以无法做商品维度的判断。
该钩子的回调参数说明:
- 第一个参数
$cart_item_data:购物车项的自定义元数据,即原有逻辑里的返回值 - 第二个参数
$product_id:当前正在被加入购物车的商品主ID,是实现指定商品判断的核心参数 - 第三个参数
$variation_id:如果加购的是可变商品的变体,该参数传递变体ID,普通商品传0
你只需要在回调函数里判断当前$product_id是否等于目标商品ID(需求中为ID=1),匹配时再执行wc_empty_cart()清空购物车即可,修改后的完整代码如下:
// 仅指定ID的商品加入购物车时,先清空原有购物车内容 add_action( 'woocommerce_add_cart_item_data', function( $cart_item_data, $product_id ) { // 定义需要触发清空逻辑的目标商品ID $target_product_id = 1; // 仅当当前加购商品为目标商品时,执行清空操作 if ( (int)$product_id === $target_product_id ) { wc_empty_cart(); } return $cart_item_data; }, 10, 2 );
注意:
add_action的最后一个参数2必须填写,作用是告知WordPress要给回调函数传递2个参数,否则无法正常获取$product_id的值,判断逻辑会失效。
上述代码实现的效果完全匹配需求:
- 加购ID为1的商品时,自动清空购物车内之前的所有商品,再添加当前商品,支持任意数量添加
- 加购其他ID的商品时,不会触发清空购物车逻辑,完全遵循WooCommerce默认加购流程
内容的提问来源于stack exchange,提问作者Rob Johnson
相关产品推荐
相关产品推荐

