Woocommerce order date-time in customer processing order email notification

后端 未结 1 1481
感动是毒
感动是毒 2021-02-06 15:31

Is there a way to get the exact order date and time to show up in woocommerce emails? So far I am using this to get the order date:



        
相关标签:
1条回答
  • 2021-02-06 16:15

    There is 4 different date cases when an order is placed (where $order is an instance of the WC_order Object) depending on order status, on the payment method used and on Woocommerce regarding behavior:

    • The creation date: $order->get_date_created()
    • The modification date: $order->get_date_modified()
    • The paid date: $order->get_date_paid()
    • The completed date: $order->get_date_completed()

    All this 4 orders different dates are WC_DateTime objects (instances) where you can use available WC_DateTime methods.

    To get the correct format to have something like:
    Order NO. XXXX (placed on February 25, 2018 10:06PM EST)
    … you will use the for example the following:

    $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")
    );
    

    If you want to use get_date_paid() or get_date_completed() methods you should need to do it carefully, testing that the WC_DateTime object exist before trying to display it…

    $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")
        );
    }
    

    As you don't specify where exactly specifically you want this to be displayed for customer processing order email notification, I will give you an example of hooked function that you can use:

    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")
        );
    }
    

    Code goes in function.php file of your active child theme (or theme).

    Tested and works.

    0 讨论(0)
提交回复
热议问题