WooCommerce订单状态:删除核心订单状态并添加自定义订单状态

101次阅读
没有评论

共计 2879 个字符,预计需要花费 8 分钟才能阅读完成。

在本文中,我们使用了 wordpress 的 WooCommerce 插件作为商店应用。我们将主要使用 wc_order_statuses 过滤器挂钩,该挂钩可添加、删除或更改 WooCommerce 订单状态的顺序。

删除核心订单状态

首先要说的就是——小心细致地操作

删除核心订单状态时,请确保没有具有该状态的产品,并且您的 WooCommerce 商店不在任何地方使用该状态,否则可能导致错误。例如,如果您不打算通过网站退款,则可以毫无问题地关闭“退款(Refunded)”状态。

您可以将本文中的所有代码插入到当前主题 functions.php 文件中。

/*
 * 删除核心订单状态
 * @param array $wc_statuses_arr 网站上所有订单状态的数组
 */
function misha_remove_order_statuses( $wc_statuses_arr ){
	// 处理中
	if( isset( $wc_statuses_arr['wc-processing'] ) ) { // 如果存在
		unset( $wc_statuses_arr['wc-processing'] ); // 从数组中删除
	}
	// 已退款
	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; // 返回结果状态
}
add_filter( 'wc_order_statuses', 'misha_remove_order_statuses' );

使用此订单状态操作挂钩后,您可能会在管理区域的订单编辑页面上看到结果:

但是,正如我之前所说,在大多数情况下都会导致问题。所以要小心。

自定义订单状态

/** 
 * 注册一个新的订单状态 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' );
 
/*
 * 将自定义状态添加到 WC 订单状态列表中
 * @param array $wc_statuses_arr 网站上所有订单状态的数组
 */
function misha_add_status( $wc_statuses_arr ) {
 
	$new_statuses_arr = array();
 
	// // 在“处理中”后面添加新状态
	foreach ( $wc_statuses_arr as $id => $label ) {
		$new_statuses_arr[ $id ] = $label;
 
		if ( 'wc-completed' === $id ) { // 在“已完成”状态之后
			$new_statuses_arr['wc-misha-shipment'] = 'Awaiting shipment';
		}
	}
 
	return $new_statuses_arr;
 
	// 如果订单状态顺序对您而言无关紧要,则可以删除第 21-32 行并取消注释以下 35-36 
	// $wc_statuses_arr['wc-misha-shipment'] = 'Awaiting shipment';
	// return $wc_statuses_arr;
 
}
add_filter( 'wc_order_statuses', 'misha_add_status' );

更改订单状态顺序

/*
 * 更改在下拉列表中状态的顺序
 * @param array $wc_statuses_arr 网站上所有订单状态的数组
 */
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' );

订单状态管理器插件

有一个可以对 WooCommerce 订单状态进行管理的插件:WooCommerce Order Status Manager,如果上面的代码对您来说有点复杂,请尝试使用该插件,但价格为 49-149 美元。而且,此插件不允许删除核心订单状态。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-06-15发表,共计2879字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)