在 WooCommerce 中,用戶支付完成后,會觸發(fā)一些 Hooks,我們可以把對訂單的自定義處理函數(shù)掛載到這些 Hooks 上面,來實現(xiàn)我們需要的自定義功能。
用戶付款完成后,有三種不同的 WooCommerce 鉤子。
woocommerce_pre_payment_completewoocommerce_payment_complete- woocommerce_payment
_complete_order_status_$status
所有這些鉤子都會在訂單已付款或不需要付款(例如貨到付款)時觸發(fā),它們也適用于自定義支付網(wǎng)關(guān)。
woocommerce_pre_payment_complete
第一個鉤子(woocommerce_pre_payment_complete)在開始支付時使用,不依賴于訂單狀態(tài)。
add_action( 'woocommerce_pre_payment_complete', 'wprs_pre_complete' );
function wprs_pre_complete( $order_id ) {
$order = wc_get_order( $order_id );
// 獲取訂單數(shù)據(jù)以進行后續(xù)處理
}
- 本文中的所有代碼片段都可以插入到當(dāng)前主題的
functions.php文件中,或者插入插件中合適的文件中。 - 我們可以從
$order對象中獲取大量訂單信息,如$order->get_items()用于獲取訂單項目,或$order->get_payment_method()用于獲取付款方式的標(biāo)題,或$order->get_user_id()用于獲取客戶 ID。
woocommerce_payment_complete
woocommerce_payment_complete只有在訂單處于以下狀態(tài)之一時才會被觸發(fā):on-hold、pending、failed、cancelled,但請記住,該狀態(tài)列表也可通過woocommerce_valid_order_statuses_for_payment_complete 進行過濾。
但在鉤子應(yīng)用之前,WooCommerce 會將訂單狀態(tài)更改為處理中或已完成,這也可以使用 woocommerce_payment_complete_order_status 進行過濾。
add_action( 'woocommerce_payment_complete', 'wprs_complete' );
function wprs_complete( $order_id ) {
$order = wc_get_order( $order_id );
// 執(zhí)行后續(xù)操作
}
woocommerce_payment_complete_order_status_$status
最后,woocommerce_payment_complete_order_status_$status將觸發(fā)其余訂單狀態(tài)。
add_action( 'woocommerce_payment_complete_order_status_processing', 'wprs_complete_for_status' );
add_action( 'woocommerce_payment_complete_order_status_completed', 'wprs_complete_for_status' );
function wprs_complete_for_status( $order_id ){
$order = wc_get_order( $order_id );
// 執(zhí)行后續(xù)操作
}
需要注意的一點是,支付完成并不代表支付成功,我們在掛載的 Hook 中的函數(shù)中,還需要進一步檢查訂單狀態(tài),甚至,如果需要更謹(jǐn)慎一點,我們還可以通過支付網(wǎng)關(guān)確認(rèn)支付金額來檢查用戶是否真的已經(jīng)支付成功,才能進行支付成功的處理。


