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
相关产品推荐
相关产品推荐

