本篇文章更新時間:2019/06/22
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
預設 WooCommerce 建立訂單的時候大部分金流(Payment Gateway)都會把訂單狀態設定成「等待付款中」,這個時候 WooCommerce 系統還不會觸發「新訂單」通知,會等待金流操作完成後改變狀態為「保留」或是「處理中」才會通知。
問題來了,如果我就是要在訂單一被建立的時候發新訂單通知怎麼辦?(參考:[WooCommerce] 程式化觸發訂單狀態發信機制)
有兩個方向可以下手:
- 建立訂單
- 感謝頁面
感謝頁面的 Hook 是 woocommerce_thankyou
或是根據付款方式的 woocommerce_thankyou_{$payment_method}
組合技。
不過缺點是如果這個頁面被重新整理就會重複觸發程式裡的設定,不是這麼的保險。(設定程式中的lock也有點多了)
所以還是抓準訂單被建立的事件來處理比較合適: wp_insert_post
或 woocommerce_new_order
。
wp_insert_post
是 WordPress 最原生的新增內容的方法,WooCommerce 在這邊也是使用它來對資料庫新增一筆資料,觸發時機比 woocommerce_new_order
還早,也是可以掌握的時機點。
下方以 wp_insert_post
來舉例針對判斷新增訂單的事件處理程式碼片段:
function mxp_wc_new_order_event($order_id, $post, $update) {
if ($post->post_type == "shop_order" && WC()->session->chosen_payment_method=="cod") {
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if (!empty($mails)) {
foreach ($mails as $mail) {
if ($mail->id == 'new_order') {
$mail->trigger($order_id);
}
}
}
}
}
add_action('wp_insert_post', 'mxp_wc_new_order_event', 11, 3);
情境為當付款方式為貨到付款且為訂單格式的時候會觸發「新訂單」信件。
而 WooCommerce 內建的事件如下,上述邏輯就不贅述了:
function mxp_woocommerce_new_order( $order_id) {
//拿著訂單編號想幹嘛就幹嘛啦~
};
add_action( 'woocommerce_new_order', 'mxp_woocommerce_new_order', 10, 1 );
「訂單一被建立的時候發新訂單通知」,咦,這個我目前好像就會會了耶,我曾試過支票付款的方式,一建立訂單就有通知了說,還是現在的版本有變嗎?
我不確定之前的版本會不會,但目前測試過「等待付款中」的狀態時如果沒有主動去觸發是不會發信的。每個金流實作的方式不同,也要看看是否是有自己觸發以及中間有過轉換訂單狀態的瞬間。