如何在WooCommerce订单通知邮件中显示精确下单时间戳?
解决WooCommerce订单邮件显示下单时间戳的问题
刚好碰到过类似的需求,给你两种可靠的实现方式,都能达到你要的「订单编号XXXX(下单时间:2018年2月25日 晚上10:06 EST)」效果:
方法一:用函数钩子(无需修改模板,推荐)
这种方法不用动邮件模板文件,直接通过WordPress的过滤器修改订单编号的显示逻辑,安全且不会被WooCommerce更新覆盖。
把下面的代码加到你当前主题(一定要用子主题,别改父主题)的functions.php文件里,或者用「Code Snippets」这类代码片段插件添加:
add_filter( 'woocommerce_order_number', 'append_order_timestamp_to_order_number', 10, 2 ); function append_order_timestamp_to_order_number( $order_number, $order ) { // 获取订单创建时间对象 $order_created_date = $order->get_date_created(); // 强制设置为EST时区(如果需要用站点默认时区,就删掉下面两行) $est_timezone = new DateTimeZone( 'America/New_York' ); $order_created_date->setTimezone( $est_timezone ); // 格式化日期时间,替换AM/PM为中文上午/晚上 $formatted_timestamp = $order_created_date->date_i18n( 'Y年n月j日 A g:i T' ); $formatted_timestamp = str_replace( ['AM', 'PM'], ['上午', '晚上'], $formatted_timestamp ); // 拼接订单编号和时间戳 return $order_number . '(下单时间:' . $formatted_timestamp . ')'; }
小提示:
- 如果不需要强制EST时区,删掉设置时区的两行即可,会自动使用WordPress后台设置的时区
- 日期格式可以自定义,比如把
Y年n月j日 A g:i T改成Y-m-d H:i:s就能显示成「2018-02-25 22:06:00」
方法二:修改邮件模板文件
如果你习惯直接改模板,记得要通过子主题覆盖,避免插件更新丢失修改:
- 在你的子主题目录下新建
woocommerce/emails文件夹 - 找到WooCommerce插件目录里的
templates/emails/email-order-details.php文件,复制到刚才新建的子主题文件夹中 - 打开复制后的文件,找到显示订单编号的代码块(大概在第20行左右):
<h2><?php echo esc_html( sprintf( __( 'Order #%s', 'woocommerce' ), $order->get_order_number() ) ); ?></h2>
- 替换成下面的代码:
<?php // 处理订单时间戳 $order_created_date = $order->get_date_created(); $est_timezone = new DateTimeZone( 'America/New_York' ); $order_created_date->setTimezone( $est_timezone ); $formatted_timestamp = $order_created_date->date_i18n( 'Y年n月j日 A g:i T' ); $formatted_timestamp = str_replace( ['AM', 'PM'], ['上午', '晚上'], $formatted_timestamp ); ?> <h2><?php echo esc_html( sprintf( __( 'Order #%s(下单时间:%s)', 'woocommerce' ), $order->get_order_number(), $formatted_timestamp ) ); ?></h2>
保存后,新的订单通知邮件就会显示带时间戳的订单编号了。
内容的提问来源于stack exchange,提问作者hnkk
相关产品推荐
相关产品推荐

