使用 WooCommerce 時,可以自己寫一些 hook 來處理訂單,譬如你想在訂單狀態變化的時候自己寫一些程式來處理。
WooCommerce hook
hook 是一種被動的觸發機制,就好像你掛號之後等待叫號一樣。會驅動 hook 的通常都是事件,譬如使用者下單,下單之後就會進入流程,譬如資料檢查、使用者登入、處理商品、建立訂單等等,而這些事件會依照順訊觸發多個 hook,所以你要知道你要處理那一個 hook 是很重要的,另外一個 hook 有可能會被多個事件觸發,帶入的參數也會不一樣,WooCommerce 的 hook 您可以參考 WooCommerce 的官方文件。
註冊 hook
把你的程式碼跟 hook 註冊,就像掛號一樣,等 WordPress 系統處理到某一個事件,就會自動執行你的程式碼。
function action_woocommerce_order_status_changed{
// your code here...
}
add_action( 'woocommerce_order_status_changed', 'action_woocommerce_order_status_changed', 10, 3 );
上面就是一個註冊 hook 的動作,當 WooCommerce 的訂單發生狀態變化的時候,WordPress 就會自動幫我執行 action_woocommerce_order_status_changed 這個函式。
整個 WordPress 中還有很多其他 hook 可以使用。
取的 WooCommerce 訂單 (Order) 的 user_id (使用者 ID)
function action_woocommerce_order_status_changed( $order_id, $old_status, $new_status ) {
$order = wc_get_order( $order_id );
$user = $order->get_user();
$username = $user->user_login;
$user_id = $order->get_user_id();
};
// add the action
add_action( 'woocommerce_order_status_changed', 'action_woocommerce_order_status_changed', 10, 3 );
使用上述程式碼就可以取得訂單人的 ID 或是帳號名稱。
問題:為什麼 user_id 一直是 0
我在測試的時候有一直抓不到 user_id 的問題,後來才發現是訂單本身的問題,如果你一直抓不到,請檢查一下訂單的 “顧客” 欄位。
顧客欄位不能是 “訪客“。