WooCommerce 的預設訂單狀態有

  • pending 等待付款中
  • processing 處理中
  • on-hold 保留
  • completed 完成
  • cancelled 取消
  • refunded 已退費
  • failed 失敗

先不管語意為何,主要是幫助商店管理員去識別訂單目前狀態,所以可能隨著使用者不同,而有不同的解釋。再來也還有一個控制訂單狀態的變數:付款方式(Payment Gateway)

每個付款方式去定義付款的狀態改變也不同,這使得管理上複雜度提高。儘管如此,目前有一個需求不變!「把未完成的訂單取消」

取消訂單這邊又還會分:金流的截止付款/付款失敗 與 WooCommerce 庫存管理(針對 pending 狀態)的兩部分程式判斷。

儘管付款方式不同,但如果希望訂單取消的狀態能夠統整怎辦? 保留的訂單、處理中的訂單都想針對設定條件來取消(例如:訂單建立後 X 小時、 N 天想要自動改為取消狀態)

WooCommerce Cancel Abandoned Order

這款 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 來解決。

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

參與討論

3 則留言

  1. 如果像是綠界金流,ATM、超商代碼、超商條碼等等線上付款方便各有不同的付款期限,如果可以運用來相互配合,應該就更完美了

    1. 可以!這款可以辦到。我的話會把那些金流上的限制取消,都統一改用這款來處理就好。反正結果是把訂單標記取消,然後也會發給客戶做通知備註。這樣完善不少~

      1. 金流上的限制取消?印象中綠界的金流上的失效限制好像是不能調整的,例如超商條碼 N 小時候後失效、ATM代碼是Y小時後失效等等,好像是固定不能調的。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *