WooCommerce 新订单不返回账单电子邮件

WooCommerce New Order Not Returning Billing E-Mail

我在使用 WooCommerce 时遇到了一个奇怪的问题。

我开发了一个插件,可以将数据从 WooCommerce 订单发送到 HubSpot。每当下新订单或更新现有订单时,插件都需要触发 。我一直在使用以下截断代码来尝试实现此目的:

add_action('save_post', 'printout', 10, 3);

function printout($post_ID, $post, $update)
{
    if ("shop_order" == $post->post_type) {
        $msg = $post_ID;

        delegator($msg);
    }
}

function delegator($order_id){

        $order = get_woocommerce_order($order_id);
            // assigns the actual data of the order to the $data variable
            $data = get_woocommerce_order_data($order);

            // assign User e-mail for search
            $email = $order->get_billing_email();

            //$email = get_post_meta( $order_id, '_billing_email', true );


}

我遇到的问题是,在下新订单时,WordPress 无法获取订单详细信息,特别是电子邮件(它 return 为空)。钩子 return 一个订单号,所以我不认为这是钩子做的,而是别的东西。

奇怪的是,如果在下订单后我进入订单页面,然后点击订单上的 更新,就可以了!

所以我想知道我错过了什么/这里出了什么问题。在 WooCommerce 可以进行数据库调用之前钩子的流程是否触发?

感谢您的帮助。快把我逼疯了!

对于通过管理员的订单 added/updated,请使用下面的代码

add_action('save_post_shop_order', 'backend_delegator', 10, 3);
    
    function backend_delegator($post_id, $post, $update) {
    
        // Orders in backend only
        if (!is_admin())
            return;
    
        // Get an instance of the WC_Order
        $order = new WC_Order($post_id);
    
        //Fired when create a new order
        if (!$update) {
            $email = $order->get_billing_email();
        }
    
        if ($update) {
            $email = $order->get_billing_email();
        }
    }

对于通过结帐下达的订单,请使用以下代码。

add_action('woocommerce_new_order', 'frondend_delegator', 10, 2);

function frondend_delegator($order_id, $order) {

    $email = $order->get_billing_email();
}