替换woocommerce_add_order_item_meta代码后无法添加自定义字段至订单及邮件
WooCommerce自定义字段添加至订单及邮件的修复方案
你的替换代码存在两个关键错误,导致自定义字段无法正常添加:
- 钩子
woocommerce_checkout_create_order_line_item的参数定义错误,它的默认参数顺序是$item, $cart_item_key, $cart_item, $order,并非你写的$item_id, $values - 错误调用了钩子函数本身,应该使用订单行项对象的
add_meta_data()方法来添加自定义元数据
正确代码示例
add_action('woocommerce_checkout_create_order_line_item', 'add_custom_item_meta_to_order', 10, 4); function add_custom_item_meta_to_order($item, $cart_item_key, $cart_item, $order) { // 检查购物车项中是否存在_goodlen字段且不为空 if (empty($cart_item['_goodlen'])) { return; } // 添加元数据,第三个参数设为true表示在订单和邮件中自动显示 $item->add_meta_data('Flavours', $cart_item['_goodlen'], true); }
关键改动说明
- 参数调整:将钩子的参数改为正确的4个,确保能获取到购物车项数据和订单行项对象
- 元数据添加方式:用
$item->add_meta_data()替代过时的woocommerce_add_order_item_meta,第三个参数true会让该元数据自动出现在订单详情页和订单邮件中 - 函数命名优化:改成更清晰的函数名,避免与钩子名混淆(可选,但更规范)
额外检查点
- 确认购物车项中的字段键确实是
_goodlen,可以在测试环境用var_dump($cart_item)查看购物车项的完整数据,验证字段是否存在 - 如果是前端自定义添加的字段,要确保该字段在商品加入购物车时已正确保存到购物车项中
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

