WooCommerce保留状态邮件添加订单号失效,求解决办法
解决WooCommerce保留状态邮件添加订单号不生效的问题
嘿,我一眼就看出问题出在哪了!你把PHP变量$order->get_id()直接塞进了单引号包裹的翻译字符串里,而且用法也不符合WooCommerce的最佳实践——这就是订单号显示不出来的原因。
问题根源
- PHP不会解析单引号内的变量,所以
$order->get_id()会被当成纯文本输出,而不是执行获取订单号的方法。 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
相关产品推荐
相关产品推荐

