在本文中,我們將主要使用wc_order_statuses過濾器掛鉤,該掛鉤可添加、刪除或更改WooCommerce訂單狀態(tài)的順序。
刪除核心訂單狀態(tài)
首先要說的就是——小心細(xì)致地操作!
刪除核心訂單狀態(tài)時,請確保沒有具有該狀態(tài)的產(chǎn)品,并且您的WooCommerce商店不在任何地方使用該狀態(tài),否則可能導(dǎo)致錯誤。例如,如果您不打算通過網(wǎng)站退款,則可以毫無問題地關(guān)閉“退款( Refunded )”狀態(tài)。
您可以將本文中的所有代碼插入到當(dāng)前主題functions.php文件中。
/*
* 刪除核心訂單狀態(tài)
* @param array $wc_statuses_arr 網(wǎng)站上所有訂單狀態(tài)的數(shù)組
*/
function misha_remove_order_statuses( $wc_statuses_arr ){
// 處理中
if( isset( $wc_statuses_arr['wc-processing'] ) ) { // 如果存在
unset( $wc_statuses_arr['wc-processing'] ); // 從數(shù)組中刪除
}
// 已退款
if( isset( $wc_statuses_arr['wc-refunded'] ) ){
unset( $wc_statuses_arr['wc-refunded'] );
}
// 保留
if( isset( $wc_statuses_arr['wc-on-hold'] ) ){
unset( $wc_statuses_arr['wc-on-hold'] );
}
// 失敗
if( isset( $wc_statuses_arr['wc-failed'] ) ){
unset( $wc_statuses_arr['wc-failed'] );
}
// 待付款
if( isset( $wc_statuses_arr['wc-pending'] ) ){
unset( $wc_statuses_arr['wc-pending'] );
}
// 已完成
//if( isset( $wc_statuses_arr['wc-completed'] ) ){
// unset( $wc_statuses_arr['wc-completed'] );
//}
// 已取消
//if( isset( $wc_statuses_arr['wc-cancelled'] ) ){
// unset( $wc_statuses_arr['wc-cancelled'] );
//}
return $wc_statuses_arr; // 返回結(jié)果狀態(tài)
}
add_filter( 'wc_order_statuses', 'misha_remove_order_statuses' );
使用此訂單狀態(tài)操作掛鉤后,您可能會在管理區(qū)域的訂單編輯頁面上看到結(jié)果:

但是,正如我之前所說,在大多數(shù)情況下都會導(dǎo)致問題。所以要小心。
自定義訂單狀態(tài)
/**
* 注冊一個新的訂單狀態(tài) ID為 "wc-misha-shipment" ,名稱為 "Awaiting shipment"
*/
function misha_register_awaiting_shipment_status() {
register_post_status( 'wc-misha-shipment', array(
'label' => 'Awaiting shipment',
'public' => true,
'show_in_admin_status_list' => true, // show count All (12) , Completed (9) , Awaiting shipment (2) ...
'label_count' => _n_noop( 'Awaiting shipment <span class="count">(%s)</span>', 'Awaiting shipment <span class="count">(%s)</span>' )
) );
}
add_action( 'init', 'misha_register_awaiting_shipment_status' );
/*
* 將自定義狀態(tài)添加到WC訂單狀態(tài)列表中
* @param array $wc_statuses_arr 網(wǎng)站上所有訂單狀態(tài)的數(shù)組
*/
function misha_add_status( $wc_statuses_arr ) {
$new_statuses_arr = array();
// //在“處理中”后面添加新狀態(tài)
foreach ( $wc_statuses_arr as $id => $label ) {
$new_statuses_arr[ $id ] = $label;
if ( 'wc-completed' === $id ) { // 在“已完成”狀態(tài)之后
$new_statuses_arr['wc-misha-shipment'] = 'Awaiting shipment';
}
}
return $new_statuses_arr;
// 如果訂單狀態(tài)順序?qū)δ詿o關(guān)緊要,則可以刪除第21-32行并取消注釋以下35-36
// $wc_statuses_arr['wc-misha-shipment'] = 'Awaiting shipment';
// return $wc_statuses_arr;
}
add_filter( 'wc_order_statuses', 'misha_add_status' );
最終的效果如下圖所示:

更改訂單狀態(tài)順序
/*
* 更改在下拉列表中狀態(tài)的順序
* @param array $wc_statuses_arr 網(wǎng)站上所有訂單狀態(tài)的數(shù)組
*/
function misha_change_statuses_order( $wc_statuses_arr ){
$new_statuses_arr = array(
'wc-processing' => $wc_statuses_arr['wc-processing'], // 1
'wc-completed' => $wc_statuses_arr['wc-completed'], // 2
'wc-cancelled' => $wc_statuses_arr['wc-cancelled'], // 3
'wc-refunded' => $wc_statuses_arr['wc-refunded'], // 4
'wc-failed' => $wc_statuses_arr['wc-failed'], // 5
'wc-pending' => $wc_statuses_arr['wc-pending'], // 6
'wc-on-hold' => $wc_statuses_arr['wc-on-hold'] // 7
);
return $new_statuses_arr;
}
add_filter( 'wc_order_statuses', 'misha_change_statuses_order' );
最終的效果如下圖所示:

訂單狀態(tài)管理器插件
有一個可以對WooCommerce訂單狀態(tài)進行管理的插件:WooCommerce Order Status Manager,如果上面的代碼對您來說有點復(fù)雜,請嘗試使用該插件,但價格為49-149美元。而且,此插件不允許刪除核心訂單狀態(tài)。
如果您還希望可以對產(chǎn)品進行訂單狀態(tài)的批量管理,可以看下教程《WooCommerce批量更改自定義訂單狀態(tài)》。
如果您對 WooCommerce 的使用還不太了解,或者想系統(tǒng)學(xué)習(xí) WooCommerce 開發(fā),可以學(xué)習(xí)教程《WooCommerce 開發(fā)指南視頻課程(使用詳解/主題開發(fā)/支付寶網(wǎng)關(guān)開發(fā))》。
聲明:原文出自 https://rudrastyh.com/woocommerce/order-statuses.html ,由WordPress大學(xué)翻譯整理,轉(zhuǎn)載請保留本聲明。




