在新订单钩子中获取订单数据



我试图在每次下订单后给自己发送电子邮件。我遇到的问题是$order->get_total()以及get_total_tax返回0而不是实际的订单总价值。

add_action( 'woocommerce_new_order', 'custom_after_order_created_hook', 12 , 1);
function custom_after_order_created_hook($order_id) {
$order = new WC_Order($order_id);
$with_tax = $order->get_total();
$tax = $order->get_total_tax();
$without_tax = $with_tax - $tax;
$to = "test@example.com";
$subject = "New order";
$content = "
New order {$order->id}
With tax: {$with_tax}
Without tax: {$without_tax}
Tax: {$tax}
";
$status = wp_mail($to, $subject, $content);
}

除了 $order_id 和$order->id之外的每个值都会被计算为 0。$order_id 具有适当的值。此问题仅在使用钩子时发生woocommerce_new_order(我也尝试在自定义页面上使用它 - 工作正常),这让我想知道。

我不确定这里有什么问题,我的代码的某些部分是异步的吗?
或者,也许在订单更新已付价格/税税信息之前调用此钩子?
我应该怎么做才能在这里获取价格信息?

谢谢。

这个woocommerce_new_order动作钩子用于更改 create_order() 函数。因此,您最好使用woocommerce_thankyou操作钩子,它将在创建订单时触发自定义电子邮件通知:

// Tested on WooCommerce versions 2.6+ and 3.0+
add_action( 'woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1 );
function new_order_custom_email_notification( $order_id ) {
if ( ! $order_id ) return;
// Getting an instance of WC_Order object
$order = wc_get_order( $order_id );
$with_tax = $order->get_total();
$tax = $order->get_total_tax();
$without_tax = $with_tax - $tax;

$to = "test@example.com";
$subject = "New order";
$content = "
New order {$order_id}
With tax: {$with_tax}
Without tax: {$without_tax}
Tax: {$tax}
";

wp_mail($to, $subject, $content);
}

代码进入函数.php活动子主题(或主题)的文件或任何插件文件中。

代码经过测试并正常工作。

使用woocommerce_checkout_order_processed动作钩子代替woocommerce_thankyou动作钩子也是一个不错的选择,甚至可能更好。你只需要替换:

add_action( 'woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1 );

由:

add_action( 'woocommerce_checkout_order_processed', 'new_order_custom_email_notification', 1, 1 );
<小时 />

类似工作 答:Woocommerce-如何根据付款类型发送自定义电子邮件


woocommerce_checkout_order_processed钩(位于WC_Checkout process_checkout()方法中,为此目的也很方便。

WC_Checkout process_checkout()方法的源代码很有趣,可以查看购买流程

相关内容

  • 没有找到相关文章

最新更新