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

如何在自定义WooCommerce邮件模板中启用{order_number}等内置变量?

解决WooCommerce邮件内置变量无法生效的问题

嘿,我来帮你搞定这个WooCommerce邮件模板的问题!你遇到的情况很常见,核心原因是WooCommerce的内置邮件变量(比如{order_number})需要依赖它的PHP模板解析机制才能生效,纯HTML文件不会自动触发这个解析流程。下面给你两种可行的解决方案:

方案一:改用PHP模板文件(推荐)

这是最标准的做法,能直接使用官方文档里的所有内置变量,步骤如下:

  1. 在你的WordPress主题文件夹(比如wp-content/themes/你的主题名)里创建woocommerce/emails目录——如果已经有就跳过这步。
  2. 找到WooCommerce插件默认的新订单模板:wp-content/plugins/woocommerce/templates/emails/new-order.php,把这个文件复制到你刚创建的woocommerce/emails目录里。
  3. 打开复制后的new-order.php,找到邮件内容的核心部分(大概是从<?php do_action( 'woocommerce_email_header', $email_heading, $email ); ?>之后的区域),把你写的HTML模板内容替换进去。
  4. 直接在HTML里使用{order_number}、{order_shipping_address}这些变量就行,比如:
    <span data-key="1468270_order_number">Bestellnr.:</span> #{order_number}
    
  5. 保存文件后,WooCommerce会自动优先加载主题里的这个自定义模板,内置变量会被自动解析成对应的订单数据,还能继承WooCommerce的邮件样式和逻辑。

方案二:在纯HTML文件中手动解析变量(不推荐)

如果你坚持想用纯HTML文件,需要手动调用WooCommerce的变量解析函数,把内置变量转换成实际数据。比如在你的HTML文件里嵌入PHP代码:

<?php
// 确保$order对象已存在(WooCommerce邮件环境下默认会传入)
if ( isset( $order ) && $order instanceof WC_Order ) {
    $mailer = WC()->mailer();
    // 把包含内置变量的内容传入解析函数
    $formatted_content = $mailer->replace_variables( 'Bestellnr.: {order_number}', $order );
    echo $formatted_content;
}
?>

不过这种方法比较繁琐,而且没办法直接复用WooCommerce的邮件结构(比如头部、尾部),所以更推荐用第一种方案。

补充说明

你之前用<?php echo $order->id; ?>能生效,是因为WooCommerce在加载邮件模板时会自动把当前订单的$order对象传递给模板,直接调用对象属性当然没问题,但内置变量的优势是已经帮你处理了数据格式化、多语言翻译等细节——比如{order_shipping_address}会自动输出符合站点设置的地址格式,比自己用PHP拼接$order->shipping_address_1等属性要省心得多。

另外要注意:永远不要直接修改WooCommerce插件目录里的模板文件,否则插件更新后你的自定义内容会全部丢失,用主题目录覆盖才是正确的姿势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:30:09