如何修改WooCommerce管理员新订单邮件主题以添加产品名称
如何修改WooCommerce店主新订单邮件主题以包含产品名称
你之前的修改存在几个明显问题:
- 未定义
$item变量,直接调用$item->get_name会触发报错 get_name()是类方法,必须加括号才能执行获取名称的操作- 订单可能包含多个产品,需要处理多产品场景避免主题信息缺失
以下是正确的调整代码,可直接替换原有函数:
add_filter('woocommerce_email_subject_new_order', 'change_admin_email_subject', 10, 2); function change_admin_email_subject( $subject, $order ) { // 获取站点名称 $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); // 初始化产品名称数组 $product_names = []; // 遍历订单内所有商品项 foreach ( $order->get_items() as $item ) { // 获取单个商品名称并加入数组 $product_names[] = $item->get_name(); } // 将产品名称数组转为逗号分隔的字符串 $product_list = implode(', ', $product_names); // 兼容WooCommerce新旧版本的订单ID获取方式 $order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id; // 构建最终邮件主题 $subject = sprintf( '[%s] New Customer Order (#%s) - Products: %s | Customer: %s %s', $blogname, $order_id, $product_list, $order->billing_first_name, $order->billing_last_name ); return $subject; }
关键细节说明:
- 遍历订单商品:通过
$order->get_items()获取订单内所有商品,确保不会遗漏任何产品 - 多产品处理:用数组收集所有产品名称后转成逗号分隔的字符串,避免主题因多产品变得混乱
- 版本兼容:通过
method_exists()判断订单ID的获取方式,适配WooCommerce 3.0+及更早版本 - 方法调用规范:
get_name()必须加括号,这是WooCommerce商品项类的标准方法调用方式
额外优化建议:
如果订单包含大量产品,可限制显示的产品数量,避免主题过长:
// 最多显示3个产品名称,剩余用"等X件商品"概括 if (count($product_names) > 3) { $product_list = implode(', ', array_slice($product_names, 0, 3)) . ' 等' . count($product_names) . '件商品'; } else { $product_list = implode(', ', $product_names); }
内容的提问来源于stack exchange,提问作者Sahar Shahid
相关产品推荐
相关产品推荐

