讓虛擬商品在付款後自動完成的方法

最近有客戶反應:「第三方金流(綠界)」在付款完成後,訂單都會轉為處理中(processing),不會自動完成(completed)」,目前 WooCommerce 預設在訂單中的商品,即便是已付費的狀態,都會轉為處理中,這邊代表網站管理員要開始處理出貨事宜,最後才要手動點擊將訂單狀態改為完成。

這邊順便提到一下Woocommerce的訂單狀態,大家容易搞混的「保留」、「處理中」到底是怎麼回事。
保留:通常是採用匯款、轉帳等付款方式會出現的,因網站不會知道有沒有付款成功,當訂單出現這個狀態就是要管理員去確認顧客是否已付款。
處理中:用戶已付款,通常跟第三方金流在一起時會出現這個訂單狀態,第三方金流確認已付款並將確認訊息拋回網站,此時管理員可以開始處理出貨。

而今天這個狀況是,客戶的商品屬於課程,這算是「虛擬商品」,但因客戶的商品編輯裡並沒有勾選「虛擬」,導致網站會照正常邏輯走,要客戶開始處理出貨,所以第一點就是請客戶將所有商品的「虛擬」要勾選起來。

勾選完畢後,我們還必須加入一段程式碼,讓「虛擬商品」在付款完成後可以自動轉為「完成」。


// 虛擬商品自動完成
add_filter('woocommerce_order_item_needs_processing', function ($need_processing, $product) {
    if ($need_processing === true) {
        return !$product->is_virtual();
    }
    return $need_processing;
}, 10, 2);

將以上程式碼放至子主題的 funstions.php 即可,之後會介紹將自訂程式碼模組化的方式。

相關文章