通过woocommerce_email_order_meta钩子仅在WooCommerce管理员邮件显示自定义字段
解决代码
你判断需要用到$sent_to_admin参数的思路是正确的,该参数值为true时代表当前邮件为管理员通知,为false时为客户通知,只需在函数开头增加对应判断,同时修正原代码中订单项名称修改不生效的问题即可,完整代码如下:
add_action( 'woocommerce_email_order_meta', 'add_depot', 10, 3 ); function add_depot( $order, $sent_to_admin, $plain_text ){ // 非管理员邮件直接终止逻辑执行 if ( ! $sent_to_admin ) { return; } $items = $order->get_items(); foreach ( $items as $item ){ $depot = $item->get_meta('depot'); // 仅当depot字段有值时修改商品名 if ( ! empty( $depot ) ) { $item->set_name( 'Dépôt: ' . $depot . ' ' . $item->get_name() ); } } }
代码说明
- 开头的判断逻辑会过滤所有客户邮件、前端订单页的展示场景,仅管理员通知会显示depot字段
- 使用WooCommerce官方提供的
set_name()方法修改订单项名称,替代原数组赋值的写法,确保修改生效 - 额外增加空值判断,避免depot无值时输出多余的前缀内容
内容的提问来源于stack exchange,提问作者Malcom
相关产品推荐
相关产品推荐

