“手动”Woocommerce 自定义订单状态的奇怪显示样式

问题描述

我正在使用以下代码为 Woocommerce 创建一个新的自定义订单状态。我遇到的问题是,在管理员中,状态显示为无样式。如何以类似于“处理”的方式设置自定义状态的样式?

enter image description here

/* 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 文件中。经测试有效。

enter image description here

要更改管理订单列表中显示的背景颜色,您将使用:
Custom order status background button color in Woocommerce 3.3 admin order list