Woocommerce 2.6.14邮件主题{order_date}变量未翻译问题求助
解决WooCommerce 2.6.14邮件主题{order_date}未本地化的问题
针对你在WooCommerce 2.6.14里遇到的部分邮件主题{order_date}变量未翻译的问题,我给你两个适配这个老版本的可行方案——毕竟你没法升级,得找针对性的解决办法:
方案一:重载邮件模板直接修改主题代码
这个方法适合你能明确找到有问题的邮件模板的情况,而且不会影响核心文件:
- 先在你的主题(优先用子主题,避免主题更新丢失修改)目录下,新建
woocommerce/emails文件夹(如果还没有的话)。 - 从WooCommerce核心的
templates/emails目录里,把有问题的那几个邮件模板(比如customer-processing-order.php、customer-completed-order.php这类)复制到刚才新建的主题文件夹里。 - 打开复制过来的模板文件,找到邮件主题定义的代码块,比如原来的代码可能是这样:
把它改成直接调用本地化后的日期,替换掉{order_date}变量:$subject = sprintf( __( 'Your %s order from %s', 'woocommerce' ), '{order_number}', '{order_date}' );// 获取当前订单对象 $order = wc_get_order( $order_id ); // 用WooCommerce默认的本地化日期格式生成日期,你也可以自定义格式比如 'd F Y' $localized_date = date_i18n( wc_date_format(), strtotime( $order->order_date ) ); // 把主题里的{order_date}换成本地化后的日期 $subject = sprintf( __( 'Your %s order from %s', 'woocommerce' ), '{order_number}', $localized_date ); - 保存文件后,触发对应类型的邮件测试(比如下个测试订单),就能看到主题里的日期显示成本地化格式了。
方案二:用钩子批量处理所有邮件主题
如果你不想逐个修改模板,这个方法更高效,只需要在主题的functions.php里加一段代码:
add_filter( 'woocommerce_email_subject', 'localize_email_order_date_subject', 10, 2 ); function localize_email_order_date_subject( $subject, $email ) { // 只处理包含{order_date}变量的邮件主题 if ( strpos( $subject, '{order_date}' ) !== false && isset( $email->object ) && is_a( $email->object, 'WC_Order' ) ) { $order = $email->object; // 生成本地化日期 $localized_date = date_i18n( wc_date_format(), strtotime( $order->order_date ) ); // 替换主题里的变量 $subject = str_replace( '{order_date}', $localized_date, $subject ); } return $subject; }
这段代码会自动拦截所有邮件的主题生成过程,只要主题里有{order_date},就会替换成订单的本地化日期,不用挨个改模板,一次性解决所有相关问题。
小提醒
- 不管用哪个方案,都不要直接修改WooCommerce核心文件,否则后续哪怕有机会升级,修改内容都会丢失,一定要用主题重载或者自定义函数的方式。
- 测试的时候记得用真实的测试订单触发对应邮件,确认日期显示和你正常的那封邮件(比如on-hold订单邮件)格式一致。
内容的提问来源于stack exchange,提问作者HOY
相关产品推荐
相关产品推荐

