以新订单钩取订单数据
我试图在每次下订单后发送一封电子邮件给自己。我的问题是$order->get_total()
以及get_total_tax
返回而不是实际的订单总价值。以新订单钩取订单数据
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 = "[email protected]";
$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 = "[email protected]";
$subject = "New order";
$content = "
New order {$order_id}
With tax: {$with_tax}
Without tax: {$without_tax}
Tax: {$tax}
";
wp_mail($to, $subject, $content);
}
代码放在您的活动子主题(或主题)的function.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 - How to send custom emails based on payment type
的
woocommerce_checkout_order_processed
钩(位于WC_Checkout process_checkout()
方法也可以方便的用于这个目的。
WC_Checkout process_checkout()
方法的源代码很有趣,可以在上查看购买流程。
谢谢,这就是我所怀疑的。你有没有机会知道整个采购流程是否记录在某个地方?到目前为止,官方文档并不是非常有帮助。 – mymlyn
@mymlyn我有一个关于WooCommerce购买流程(最后)的答案的女佣。我希望这会帮助你;所以你可以使用woocommerce_checkout_order_processed – LoicTheAztec
WC的哪个版本? – 2017-04-14 18:23:05