如何在 WooCommerce 中自動更改訂單狀態

已發表: 2021-07-31

您想更新商店中的訂單狀態嗎? 你來對地方了。 在本指南中,我們將向您展示如何使用一些 PHP 腳本在 WooCommerce 中自動更改訂單狀態。 如果您沒有高級編碼技能,請不要擔心,我們將詳細解釋每個腳本。

WooCommerce 為開發人員提供了許多功能,因此如果您具有編碼技能,您可以進行各種自定義並改進您的電子商務商店。 在以下教程中,您將了解有關訂單狀態的所有信息。 這是 WooCommerce 的一項功能,在管理大量訂單時非常有用。 它在後端訂單列表中特別有用,商店經理可以輕鬆地搜索並針對具有特定狀態的訂單採取某些操作。

事不宜遲,讓我們直接進入它。

WooCommerce 中的訂單狀態是什麼?

訂單狀態只是訂單的一個標籤,代表訂單的當前狀態。 它類似於附加到帖子的分類法,描述有關該帖子當前狀態的特定信息。 例如,當客戶點擊“下訂單”按鈕時,他們會在我們的商店下訂單。 默認情況下,訂單狀態設置為“待付款”。

如果商店與 PayPal 或 Stripe 等支付網關集成,則會驗證之前的默認狀態(待處理),並根據支付網關驗證結果更改為“暫停”或“失敗”。 然後,如果支付完成,訂單狀態會自動變為“處理中”,如果支付失敗,訂單狀態會自動變為“失敗”。

如您所見,這些狀態中的每一個都為我們提供了有關訂單的相關信息。 這種自動化讓我們知道訂單的付款是否已經完成,或者沒有將我們的產品交付給客戶。

WooCommerce 中的訂單狀態

這些是 WooCommerce 中可用的所有訂單狀態以及每個狀態的含義:

  • 待付款:訂單已收到,尚未註冊付款。 我們正在等待付款
  • 失敗:由於某種原因支付失敗。 這意味著它被支付平台(即 PayPal)拒絕或需要進一步的身份驗證(SCA)
  • 處理中:本店已收到貨款,商品庫存已更新,購買如期發貨
  • 已完成:訂單已完成並完成。 這是一切順利的訂單的最後狀態
  • On hold : 客戶沒有付款,所以訂單需要店長確認
  • 已取消:商店管理員或用戶在某個時間點取消了訂單。 這不需要任何進一步的操作,但建議聯繫客戶以了解他們取消訂單的原因
  • 退款:訂單已退款,無需進一步操作

現在我們更好地了解了訂單狀態及其功能,讓我們看看為什麼更新它是個好主意。

為什麼要更改默認訂單狀態功能?

每個電子商務商店都是不同的,並且有特定的要求。 一些在線商店可能根本不使用訂單狀態,或者可能不會全部使用它們。 例如,如果購物者無法退貨,商店可能不會使用退款狀態。

此外,在某些情況下,默認訂單狀態功能可能不夠用,商店需要自定義狀態或自動化解決方案來管理訂單狀態。 在這些情況下,自定義訂單狀態行為是改善店舖管理的絕佳解決方案。 這樣,電子商務商店就不需要在每種情況下手動更新訂單狀態。

這將幫助店主節省時間,讓他們專注於更重要的事情來改善他們的業務。

WooCommerce 中的訂單狀態如何變化

此時,重要的是要了解當 WooCommerce 與 PayPal、Payoneer、Stripe 等支付網關集成時,訂單狀態會動態變化。 請記住,如果您在未預料到的情況下手動更新狀態,您可能會破壞商店中提供的付款方式,客戶將無法遵循購買流程。

為了更好地理解我們要做什麼,讓我們看看訂單狀態流程是如何工作的:

woocommerce-訂單狀態

來自 WooCommerce 文檔

如上圖所示,訂單狀態的第一階段是“待處理”。 之後,支付網關會驗證用戶是否可以完成支付並將其狀態更改為“暫停”,然後在支付成功完成後更改為“處理中”。 否則,它會變成“失敗”。

在此之後,WooCommerce 不會做任何其他事情。 店長應將訂單標記為“已完成”或“已取消”。 此時,即使集成了支付網關,自動(以編程方式)更改訂單狀態也是安全的。

此外,重要的是要知道,當狀態更改為“處理中”或“已退款”時,將重新計算訂單中涉及的產品的庫存。 與該訂單相關的在線商店的所有統計數據也會發生同樣的情況。

現在我們對訂單狀態如何變化有了清晰的認識,讓我們看看如何在 WooCommerce 中更新訂單狀態

如何在 WooCommerce 中自動更改訂單狀態

讓我們看一些示例腳本,以在 WooCommerce 中以編程方式更改訂單狀態

注意:我們將編輯一些核心文件,因此在開始之前,請確保對您的站點進行完整備份。 此外,如果您還沒有一個子主題或使用這些插件中的任何一個,那麼即使在更新您的主題後您也可以保留您的自定義。

購買後更改所有訂單狀態

如果您的電子商務商店未與任何使用訂單狀態的支付網關集成,您可以在客戶下訂單後立即暫停所有訂單,而不是將其保留為“處理中”。 讓我們看一下這個腳本:

 函數 QuadLayers_change_order_status( $order_id ) {  
                if ( ! $order_id ) {return;}            
                $order = wc_get_order($order_id);
                if('處理'== $order->get_status()) {
                    $order->update_status('wc-on-hold');
                }
}
add_action('woocommerce_thankyou','QuadLayers_change_order_status');

我們使用woocommerce_thankyou鉤子在下訂單後立即觸發我們的函數,並使用update_status()更改狀態。

如您所見,狀態塊有一個前綴 (WC)。 儘管該函數在沒有前綴的情況下也可以工作,但建議使用它。

woocommerce-order-status-on-hold

值得注意的是,您可以通過調整代碼來使用任何其他狀態甚至自定義狀態,而不是“等待”。

從訂單 ID 修改訂單狀態

以下腳本將更改單個訂單的狀態。 例如,要更改訂單 115 的訂單狀態,我們使用以下代碼段:

 add_action('init',function(){
	$order = 新的 WC_Order(115);
        $order->update_status('wc-processing'); 
});

這是一個簡短的腳本,所以我們在'init' WordPress 掛鉤中使用了一個匿名函數。

請注意,這將不允許您在啟用腳本時對狀態進行進一步更改。

為回頭客更新 WooCommerce 訂單狀態

這是在 WooCommerce 中自動更改訂單狀態的另一個有趣示例。 僅當用戶的先前訂單附加了“已完成”或“處理中”狀態時,以下腳本才會將訂單狀態更改為“已完成”。

 函數 QuadLayers_order_status_returning( $order_id ) {
        // 獲取此客戶訂單
         $user_id = wp_get_current_user();
        $customer_orders = [];
        foreach ( wc_get_is_paid_statuses() as $paid_status ) {
            $customer_orders += wc_get_orders( [
                '類型' => 'shop_order',
                '限制' => - 1,
                'customer_id' => $user_id->ID,
                '狀態' => $paid_status,
            ]);
        }
            # 上一個訂單存在
            如果(計數($customer_orders)>0){ 
                     if ( ! $order_id ) {return;}            
                     $order = wc_get_order($order_id);
                     if('處理'== $order->get_status()) {
                         $order->update_status('wc-completed');
                     }
            }
}
add_action('woocommerce_thankyou', 'QuadLayers_order_status_returning');

這可能是一個好主意,可以增加一層安全性並改善回頭客的購物體驗。

更改 URL 參數的訂單狀態

當 URL 參數出現在瀏覽器上時,此示例腳本將更改為特定的訂單狀態。 當我們使用init WordPress 掛鉤時,該腳本將在商店的任何頁面上運行。

此外,它將編輯當前登錄用戶的最新訂單的訂單狀態。 在此示例中,當任何 URL 具有如下“revert”參數時,訂單狀態將更改為“Cancelled”: https://website.com/shop?st=revert ://website.com/shop?st=revert

 add_action('init',function(){
    if(isset($_GET['st'])&&!empty($_GET['st']) ):
        $get_url = $_GET['st'];
 
        if($get_url=='revert'):
            $user_id = wp_get_current_user();
            $order = wc_get_customer_last_order($user_id->ID);  
            $order->update_status('wc-cancelled');
        萬一;
    萬一;
});

創建自定義訂單狀態

在此示例中,我們將創建一個可以自由使用的新自定義訂單狀態,而不是更改訂單狀態。 如果現有狀態還不夠,或者您希望創建一個新狀態以提高清晰度,這是一個好主意。 創建自定義訂單狀態後,您可以將其與上述任何腳本一起使用。

以下腳本將註冊並向訂單狀態列表添加新狀態。 在這種情況下,我們將新的自定義訂單狀態稱為“進行中”,但您可以通過簡單地自定義代碼來使用任何您想要的名稱。

 //註冊新狀態
函數 register_in_progress_order_status() {
    register_post_status('wc-in-progress',數組(
        '標籤' => '進行中',
        '公共' => 真的,
        'show_in_admin_status_list' => 真,
        'show_in_admin_all_list' => 真,
        'exclude_from_search' => 假,
        'label_count' => _n_noop('進行中(%s) ', '進行中(%s) ')
    ));
}
// 將自定義狀態添加到訂單狀態列表
函數 add_in_progress_to_order_statuses( $order_statuses ) {
    $new_order_statuses = 數組();
    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;
        if ('wc-processing' === $key) {
            $new_order_statuses['wc-in-progress'] = '進行中';
        }
    }
    返回 $new_order_statuses;
}
add_action('init', 'register_in_progress_order_status');
add_filter('wc_order_statuses', 'add_in_progress_to_order_statuses');



woocommerce-custom-order-status

更改 WooCommerce 訂單狀態的其他方法

如果您正在尋找更新 WooCommerce 中默認訂單狀態的替代方法,您可以查看一些插件。 不幸的是,沒有很多免費工具,但這些是最好的:

  • YITH 自定義訂單狀態:管理訂單狀態和創建自定義狀態的出色工具。 它是市場上最好的工具之一,但並不便宜。 每年將花費您 79.99 歐元。
  • WooCommerce 訂單狀態管理器:另一個用於添加、刪除和編輯訂單狀態的出色插件。 您還可以根據訂單狀態觸發電子郵件。 每年的費用為 49 美元。
  • WooCommerce 的自定義訂單狀態:在 WooCommerce 中管理訂單狀態的最佳工具之一。 這是一個高級插件,起價為每年 39 美元。
  • Ni WooCommerce 自定義訂單狀態:少數可靠的免費插件之一,可讓您輕鬆管理訂單狀態。

如何在您的 WooCommerce 商店中查看訂單狀態

在您的商店中查看訂單狀態的最簡單方法是打開您的 WooCommerce 儀表板並轉到訂單。 然後,打開任何訂單,然後在“常規”部分下,按“狀態”下拉菜單。 在那裡,您將看到商店中的所有訂單。

結論

總之,訂單狀態是表示訂單當前狀態的標籤。 儘管 WooCommerce 包含某些默認狀態,但對於那些想要刪除或添加新狀態的人來說,自定義它們可能是一個好主意。 對於需要自動化解決方案來管理訂單狀態的企業來說,它也是一個有趣的解決方案。

在本指南中,我們已經看到了所有默認訂單狀態以及在 WooCommerce 中自動更改訂單狀態的不同示例。 這些只是一些想法,但您可以做的還有很多。 我們建議您以這些腳本為基礎並嘗試為您的商店自定義它們。

有關如何自定義商店的更多信息,請查看以下教程:

  • 如何自動應用 WooCommerce 優惠券
  • 以編程方式編輯 WooCommerce 感謝頁面
  • 如何自定義 WooCommerce 註冊表單
  • 3 種測試 WooCommerce 訂單的方法
  • 如何添加 WooCommerce AJAX 產品過濾器

您是否更新了商店中的訂單狀態? 您按照本指南有任何問題嗎? 在下面的評論中讓我們知道!