根据订单状态在 WooCommerce 管理订单列表中隐藏订单(table 行)

Hide orders (table rows) in WooCommerce admin order list based on order status

我需要在 WooCommerce 管理员订单列表中隐藏具有特定状态的订单。 (wp-admin/edit.php?post_type=shop_order).

CSS 不会工作,因为用户只显示了 20 行,可能有一个页面没有结果,因为许多订单可能有此状态。

我尝试了以下功能:

add_action('wc_order_statuses', 'my_statuses');

function my_statuses($order_statuses) {

    unset($order_statuses['wc-my_status']);
    return $order_statuses;
}

...但这与我在 谢谢页面 上的功能(如下)发生冲突,后者不再将订单状态更改为我的自定义状态,可能是因为提到的功能以上将其删除。

add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ){

    if( // my custom code ) {
        $order->update_status( 'my_status' );
      }
}

有没有简单的方法可以从 WooCommerce 管理面板的订单列表中隐藏带有 my_status 的订单?

在 WooCommerce 管理员订单列表中隐藏包含特定订单状态的行。您可以使用 parse_query 操作挂钩。

所以你得到:

function action_parse_query( $query ) { 
    global $pagenow;
    
    // Your order status to hide, must start with 'wc-'
    $hide_order_status = 'wc-completed';

    // Initialize
    $query_vars = &$query->query_vars;
    
    // Only on WooCommerce admin order list
    if ( $pagenow == 'edit.php' && $query_vars['post_type'] == 'shop_order' ) {
        // Finds whether a variable is an array
        if ( is_array( $query_vars['post_status'] ) ) {  
            // Searches the array for a given value and returns the first corresponding key if successful
            if ( ( $key = array_search( $hide_order_status, $query_vars['post_status'] ) ) !== false ) {
                unset( $query_vars['post_status'][$key] );
            }
        }
    }

}
add_action( 'parse_query', 'action_parse_query', 10, 1 );