如何在 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 中以編程方式更改訂單狀態。
注意:我們將編輯一些核心文件,因此在開始之前,請確保對您的站點進行完整備份。 此外,如果您還沒有一個子主題或使用這些插件中的任何一個,那麼即使在更新您的主題後您也可以保留您的自定義。
購買後更改所有訂單狀態
如果您的電子商務商店未與任何使用訂單狀態的支付網關集成,您可以在客戶下訂單後立即暫停所有訂單,而不是將其保留為“處理中”。 讓我們看一下這個腳本:
函數 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)。 儘管該函數在沒有前綴的情況下也可以工作,但建議使用它。
值得注意的是,您可以通過調整代碼來使用任何其他狀態甚至自定義狀態,而不是“等待”。
從訂單 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 訂單狀態的其他方法
如果您正在尋找更新 WooCommerce 中默認訂單狀態的替代方法,您可以查看一些插件。 不幸的是,沒有很多免費工具,但這些是最好的:
- YITH 自定義訂單狀態:管理訂單狀態和創建自定義狀態的出色工具。 它是市場上最好的工具之一,但並不便宜。 每年將花費您 79.99 歐元。
- WooCommerce 訂單狀態管理器:另一個用於添加、刪除和編輯訂單狀態的出色插件。 您還可以根據訂單狀態觸發電子郵件。 每年的費用為 49 美元。
- WooCommerce 的自定義訂單狀態:在 WooCommerce 中管理訂單狀態的最佳工具之一。 這是一個高級插件,起價為每年 39 美元。
- Ni WooCommerce 自定義訂單狀態:少數可靠的免費插件之一,可讓您輕鬆管理訂單狀態。
如何在您的 WooCommerce 商店中查看訂單狀態
在您的商店中查看訂單狀態的最簡單方法是打開您的 WooCommerce 儀表板並轉到訂單。 然後,打開任何訂單,然後在“常規”部分下,按“狀態”下拉菜單。 在那裡,您將看到商店中的所有訂單。
結論
總之,訂單狀態是表示訂單當前狀態的標籤。 儘管 WooCommerce 包含某些默認狀態,但對於那些想要刪除或添加新狀態的人來說,自定義它們可能是一個好主意。 對於需要自動化解決方案來管理訂單狀態的企業來說,它也是一個有趣的解決方案。
在本指南中,我們已經看到了所有默認訂單狀態以及在 WooCommerce 中自動更改訂單狀態的不同示例。 這些只是一些想法,但您可以做的還有很多。 我們建議您以這些腳本為基礎並嘗試為您的商店自定義它們。
有關如何自定義商店的更多信息,請查看以下教程:
- 如何自動應用 WooCommerce 優惠券
- 以編程方式編輯 WooCommerce 感謝頁面
- 如何自定義 WooCommerce 註冊表單
- 3 種測試 WooCommerce 訂單的方法
- 如何添加 WooCommerce AJAX 產品過濾器
您是否更新了商店中的訂單狀態? 您按照本指南有任何問題嗎? 在下面的評論中讓我們知道!