WooCommerce购物车更新元数据未同步,删除重加代码失效求助
WooCommerce购物车更新时同步商品元数据的修复方案
你的代码无法运行的核心问题是先清空了购物车,再去遍历空的购物车数据,导致循环根本不会执行。另外还有变量名冲突、未传递原商品元数据的问题,以下是修正后的解决方案:
原代码的问题点
- 执行
WC()->cart->empty_cart();后,WC()->cart->get_cart()返回空数组,后续循环无内容可处理 - 函数参数
$cart_updated与循环变量重名,容易引发逻辑混乱 - 重新添加商品时未携带原购物车项的元数据(如sumo measures插件需要的
size、pack字段),即使重新添加也无法同步元数据
修正后的代码
add_action( 'woocommerce_update_cart_action_cart_updated', 'sync_cart_item_metadata_on_update', 20, 1 ); function sync_cart_item_metadata_on_update( $cart_updated ){ // 先保存当前所有购物车项的完整数据到临时数组 $cart_items = []; foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ){ $cart_items[] = [ 'product_id' => $cart_item['product_id'], 'quantity' => $cart_item['quantity'], 'variation_id' => $cart_item['variation_id'], 'cart_item_data'=> $cart_item['cart_item_data'] // 保存原商品的所有元数据 ]; } // 清空购物车 WC()->cart->empty_cart(); // 遍历临时数组,重新添加商品并携带原元数据 foreach( $cart_items as $item ){ WC()->cart->add_to_cart( $item['product_id'], $item['quantity'], $item['variation_id'], [], // 变体属性(如果需要可从原cart_item中提取) $item['cart_item_data'] // 传递原元数据,确保sumo measures能重新计算 ); } }
关键说明
- 先把购物车所有项的完整数据(包括元数据)存入临时数组,再清空购物车,避免遍历空数据
- 传递
cart_item_data参数,确保sumo measures插件需要的size、pack等元数据被携带到新添加的购物车项中,触发插件重新计算 - 如果你的商品是变体产品,
variation_id和变体属性(第四个参数)需要正确传递,确保添加的是对应变体
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

