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

WooCommerce保留状态邮件添加订单号失效,求解决办法

解决WooCommerce保留状态邮件添加订单号不生效的问题

嘿,我一眼就看出问题出在哪了!你把PHP变量$order->get_id()直接塞进了单引号包裹的翻译字符串里,而且用法也不符合WooCommerce的最佳实践——这就是订单号显示不出来的原因。

问题根源

  1. PHP不会解析单引号内的变量,所以$order->get_id()会被当成纯文本输出,而不是执行获取订单号的方法。
  2. esc_html_e()函数是直接输出翻译后的静态字符串,不能直接把动态内容混在翻译文本里,这既不利于国际化翻译,也容易引发安全问题。

正确的代码写法

换成下面的代码,就能正常显示订单号了:

<p><?php 
printf( 
    esc_html__( 'Thanks for your order. Your order number is %s. Below you can find the contents of your order.', 'woocommerce' ), 
    esc_html( $order->get_id() ) 
); 
?></p>

代码解释

  • esc_html__():获取翻译后的静态字符串,其中%s是动态内容的占位符,方便翻译人员处理,也符合WooCommerce的国际化规范。
  • sprintf():把订单号(通过$order->get_id()获取)替换到占位符%s的位置。
  • esc_html( $order->get_id() ):对订单号进行HTML转义,避免潜在的XSS安全风险,这是WooCommerce开发的必备规范。

额外注意事项

  • 确保你的模板文件中已经正确传递了$order对象:在WooCommerce的邮件模板里,通常会在顶部有global $order;或者通过函数参数传入了$order,如果没有的话,你可能需要先获取订单对象,比如用$order = wc_get_order( $order_id );(前提是你能拿到对应的$order_id)。
  • 建议用子主题覆盖邮件模板:不要直接修改WooCommerce核心的模板文件,否则插件更新后你的修改会丢失。找到WooCommerce的emails/customer-on-hold-order.php模板,复制到你的子主题的woocommerce/emails/目录下再修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:57:54