/**
* Add WooCommerce order count column to Users admin page.
*/

// Add column.
add_filter( ‘manage_users_columns’, function( $columns ) {
$columns[‘wc_order_count’] = ‘Orders’;
return $columns;
} );

// Populate column.
add_filter( ‘manage_users_custom_column’, function( $value, $column_name, $user_id ) {

if ( ‘wc_order_count’ !== $column_name ) {
return $value;
}

$count = wc_get_customer_order_count( $user_id );

$url = admin_url(
‘edit.php?post_type=shop_order&_customer_user=’ . $user_id
);

return sprintf(
‘<a href=”%s”>%d</a>’,
esc_url( $url ),
$count
);

}, 10, 3 );

// Make column sortable.
add_filter( ‘manage_users_sortable_columns’, function( $columns ) {
$columns[‘wc_order_count’] = ‘wc_order_count’;
return $columns;
} );

add_action( ‘pre_get_users’, function( $query ) {

if (
! is_admin() ||
‘wc_order_count’ !== $query->get( ‘orderby’ )
) {
return;
}

global $wpdb;

$query->set( ‘meta_query’, array() );

add_filter( ‘pre_user_query’, function( $user_query ) use ( $wpdb ) {

$user_query->query_from .= ”
LEFT JOIN (
SELECT
post_author AS user_id,
COUNT(ID) AS order_count
FROM {$wpdb->posts}
WHERE post_type = ‘shop_order’
GROUP BY post_author
) wc_orders
ON {$wpdb->users}.ID = wc_orders.user_id
“;

$user_query->query_orderby = “ORDER BY wc_orders.order_count DESC”;

} );

} );