本篇文章更新時間:2019/05/25
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
WooCommerce 的預設訂單狀態有
- pending 等待付款中
- processing 處理中
- on-hold 保留
- completed 完成
- cancelled 取消
- refunded 已退費
- failed 失敗
先不管語意為何,主要是幫助商店管理員去識別訂單目前狀態,所以可能隨著使用者不同,而有不同的解釋。再來也還有一個控制訂單狀態的變數:付款方式(Payment Gateway)
每個付款方式去定義付款的狀態改變也不同,這使得管理上複雜度提高。儘管如此,目前有一個需求不變!「把未完成的訂單取消」
取消訂單這邊又還會分:金流的截止付款/付款失敗 與 WooCommerce 庫存管理(針對 pending 狀態)的兩部分程式判斷。
儘管付款方式不同,但如果希望訂單取消的狀態能夠統整怎辦? 保留的訂單、處理中的訂單都想針對設定條件來取消(例如:訂單建立後 X 小時、 N 天想要自動改為取消狀態)
這款 WooCommerce Cancel Abandoned Order 外掛就可以處理!
預設裝好真的不知道怎辦,看了一下文件才發現,原來真的是比較工程的應用,需要自己去針對付款方式的金流去處理開啟功能,然後也可以自己寫 Filter 去針對訂單來改取消。
取消的狀態類型預設是「保留」,我這邊如果要「只」針對「等待付款中」的話需要補下方的程式碼片段
unction woa_custom_statustocancel_hook( $status ) {
// More explication on WooCommerce status : https://docs.woocommerce.com/document/managing-orders/
$status = array();
$status[] = 'pending';
//$status[] = 'on-hold';
//$status[] = 'processing';
//$status[] = 'completed';
//$status[] = 'refunded';
//$status[] = 'failed';
return $status;
}
add_filter( 'woo_cao_statustocancel', 'woa_custom_statustocancel_hook', 111, 1 );
把今天(含)之前所有的「等待付款中」都取消:
function test_woo_cao_date_order($old_date, $gateway, $mode){
return strtotime('tomorrow');
}
//測試取消全部未付款訂單
add_filter('woo_cao_date_order','test_woo_cao_date_order',11,3);
新增支援其他金流方式:
function woa_custom_gateways_hook( $gateways ) {
$gateways[] = '金流方式的 Slug';
return $gateways;
}
add_filter( 'woo_cao_gateways', 'woa_custom_gateways_hook', 10, 1 );
把設定處理好後他會根據設定去加入 WordPress Cron jobs 來定時觸發,需要測試有沒有成功可以搭配 WP Crontrol 這外掛來看看。
上一篇 [WooCommerce] 程式化觸發訂單狀態發信機制 也是使用這款外掛處理,但碰到沒有觸發取消時候的發信服務,所以自己串 Hook 來解決。
如果像是綠界金流,ATM、超商代碼、超商條碼等等線上付款方便各有不同的付款期限,如果可以運用來相互配合,應該就更完美了
可以!這款可以辦到。我的話會把那些金流上的限制取消,都統一改用這款來處理就好。反正結果是把訂單標記取消,然後也會發給客戶做通知備註。這樣完善不少~
金流上的限制取消?印象中綠界的金流上的失效限制好像是不能調整的,例如超商條碼 N 小時候後失效、ATM代碼是Y小時後失效等等,好像是固定不能調的。