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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:07