问题描述
我正在使用以下代码为 Woocommerce 创建一个新的自定义订单状态。我遇到的问题是,在管理员中,状态显示为无样式。如何以类似于“处理”的方式设置自定义状态的样式?
/* Adding a new custom order status */
function register_manual_order_status() {
register_post_status( 'wc-manual',array(
'label' => 'Manual Order','public' => true,'exclude_from_search' => false,'show_in_admin_all_list' => true,'show_in_admin_status_list' => true,'label_count' => _n_noop( 'Manual order (%s)','Manual order (%s)' )
) );
}
add_action( 'init','register_manual_order_status' );
// Add to list of WC Order statuses
function add_manual_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// add new order status after processing
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_order_statuses['wc-manual'] = 'Manual';
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses','add_manual_to_order_statuses' );
解决方法
不要使用 wc-manual
slug,因为 manual
slug 已在 WooCommerce 中保留并显示一个箭头。而是将您的状态 slug 更改为 wc-manual-order
,并且箭头将根据需要替换为状态名称。
所以你的代码将是:
// Add a custom order status
add_action( 'init','register_manual_order_status' );
function register_manual_order_status() {
register_post_status( 'wc-manual-order',array(
'label' => __('Manual Order'),'public' => true,'exclude_from_search' => false,'show_in_admin_all_list' => true,'show_in_admin_status_list' => true,'label_count' => _n_noop( 'Manual order (%s)','Manual order (%s)' )
) );
}
// Add Custom order status after processing on order statuses dropdown
add_filter( 'wc_order_statuses','add_manual_to_order_statuses' );
function add_manual_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_order_statuses['wc-manual-order'] = __('Manual');
}
}
return $new_order_statuses;
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
要更改管理订单列表中显示的背景颜色,您将使用:
Custom order status background button color in Woocommerce 3.3 admin order list