Woocommerce订单日期 - 客户处理订单电子邮件通知中的时间

时间:2018-02-25 21:07:35

标签: php datetime woocommerce orders email-notifications

有没有办法确定在woocommerce电子邮件中显示的确切订单日期和时间?到目前为止,我使用它来获取订单日期:

<?php printf( '<time datetime="%s">%s</time>', $order->get_date_created()->format( 'c' ), wc_format_datetime( $order->get_date_created() ) ); ?>

我收到了正确的日期,但是下订单时没有时间戳。如何添加确切的时间戳?

这样的事情:

订单号XXXX(2018年2月25日美国东部时间晚上10点06分)

1 个答案:

答案 0 :(得分:5)

下订单时有 4个不同日期的情况 (其中$orderWC_order对象的实例),具体取决于订单状态,使用的付款方式以及关于行为的Woocommerce:

  • 创建日期:$order->get_date_created()
  • 修改日期:$order->get_date_modified()
  • 付款日期:$order->get_date_paid()
  • 完成日期:$order->get_date_completed()

所有这4个订单的不同日期都是WC_DateTime个对象(实例),您可以使用WC_DateTime方法。

要获得正确的格式,请执行以下操作:
订单号XXXX(2018年2月25日美国东部时间晚上10:06)
......你将使用例如以下内容:

$date_modified = $order->get_date_modified();
echo sprintf( '<p>Order NO. %s (placed on <time>%s</time>)</p>', 
    $order->get_order_number( ), 
    $date_modified->date("F j, Y, g:i:s A T")
);
  

如果您想使用get_date_paid()get_date_completed()方法,则需要仔细检查,测试WC_DateTime对象是否存在,然后再尝试显示它...

$date_paid = $order->get_date_paid();
if( ! empty( $date_paid) ){
    echo sprintf( '<p>Order NO. %s (placed on <time>%s</time>)</p>', 
        $order->get_order_number( ), 
        $date_paid->date("F j, Y, g:i:s A T")
    );
}

由于您未指定要为客户处理订单电子邮件通知显示的具体内容,我将为您提供一个可以使用的挂钩功能示例:

add_action( 'woocommerce_email_order_details', 'custom_processing_order_notification', 1, 4 );
function custom_processing_order_notification( $order, $sent_to_admin, $plain_text, $email ) {
    // Only for processing email notifications to customer
    if( ! 'customer_processing_order' == $email->id ) return;

    $date_modified = $order->get_date_modified();
    $date_paid = $order->get_date_paid();

    $date =  empty( $date_paid ) ? $date_modified : $date_paid;

    echo sprintf( '<p>Order NO. %s (placed on <time>%s</time>)</p>',
        $order->get_order_number( ),
        $date->date("F j, Y, g:i:s A T")
    );
}

代码放在活动子主题(或主题)的function.php文件中。

经过测试和工作。