You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:16:11