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

WooCommerce自定义购物车数据无法保存到订单项产品元数据如何解决

问题根因

  • 回调函数注册时函数名前存在多余空格,你提供的同步代码中add_action的第二个参数为' se_wc_product_add_on_order_item_meta',字符串开头多了一个空格,WordPress 钩子回调会严格匹配函数字符串,空格导致系统无法找到对应函数,代码完全没有执行。
  • 多站点架构下可能查错了数据库表:多站点的子站点 WooCommerce 数据表会带有站点ID前缀,比如ID为3的子站点,订单项元数据表为wp_3_woocommerce_order_itemmeta,而非默认的wp_woocommerce_order_itemmeta。

修正后的完整代码

你之前添加购物车自定义字段的代码没有问题,同步到订单项的代码修正后如下:

function se_wc_product_add_on_order_item_meta( $item, $cart_item_key, $values, $order ) {
    $product_order_type = $values['product_order_type'] ?? '';
    if ( ! empty( $product_order_type ) ) {
        $item->add_meta_data( 'product_order_type', $product_order_type );
    }
}
// 已移除函数名前的多余空格
add_action( 'woocommerce_checkout_create_order_line_item', 'se_wc_product_add_on_order_item_meta', 10, 4 );

附加说明

该代码天然兼容可变产品场景,不需要额外适配。如果需要在订单详情页、订单邮件等前端位置展示该自定义字段,可添加以下代码:

add_filter( 'woocommerce_order_item_get_formatted_meta_data', function($formatted_meta, $item) {
    foreach ( $formatted_meta as $key => $meta ) {
        if ( $meta->key === 'product_order_type' ) {
            // 可自行修改展示的字段别名
            $formatted_meta[$key]->display_key = '商品订购类型';
        }
    }
    return $formatted_meta;
}, 10, 2 );

内容的提问来源于stack exchange,提问作者Chris Heath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:39:01