共計 2879 個字符,預(yù)計需要花費(fèi) 8 分鐘才能閱讀完成。
在本文中,我們使用了 wordpress 的 WooCommerce 插件作為商店應(yīng)用。我們將主要使用 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)進(jìn)行管理的插件:WooCommerce Order Status Manager,如果上面的代碼對您來說有點復(fù)雜,請嘗試使用該插件,但價格為 49-149 美元。而且,此插件不允許刪除核心訂單狀態(tài)。
正文完