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

如何在WooCommerce邮件主题加商品名?现有代码致结账报错求修复

修复后的WooCommerce邮件主题自定义代码

原代码报错原因有两个:

  1. 错误调用了订单属性的方法形式(比如$order->billing_first_name()),WooCommerce订单的账单信息需要用官方提供的getter方法(如get_billing_first_name())
  2. 未判断$email->object是否为WC_Order实例,结账流程中该钩子可能被触发但当前对象不是订单,导致调用订单方法时报错

以下是修复后的代码:

add_filter( 'woocommerce_email_format_string', 'add_custom_email_format_string', 10, 2 );
function add_custom_email_format_string( $string, $email ) {
    // 仅当当前对象是WC_Order实例时执行后续逻辑
    if ( ! is_a( $email->object, 'WC_Order' ) ) {
        return $string;
    }

    $order          = $email->object;
    $products_names = array();

    // 遍历订单商品,获取商品名称
    foreach( $order->get_items() as $item ) {
        if ( is_a( $item, 'WC_Order_Item_Product' ) ) {
            $products_names[] = $item->get_name();
        }
    }

    // 替换自定义占位符
    $string = str_replace( '{biller_fname}', $order->get_billing_first_name(), $string );
    $string = str_replace( '{biller_lname}', $order->get_billing_last_name(), $string );
    $string = str_replace( '{biller_email}', $order->get_billing_email(), $string );
    $string = str_replace( '{product_name}', implode( ', ', $products_names ), $string );
    $string = str_replace( '{blog_name}', get_bloginfo( 'name' ), $string );

    return $string;
}

可用的邮件主题标签

  • {product_name}:订单中所有商品名称(多个商品用逗号分隔)
  • {biller_fname}:客户账单名
  • {biller_lname}:客户账单姓氏
  • {biller_email}:客户账单邮箱
  • {blog_name}:你的网站名称

内容的提问来源于stack exchange,提问作者Dhinesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:13