I am trying to get users list sort by metakey. I mean i have set meta key user_last_login. some users doesnot have this meta key. some users have it.
I want to get both users in single query but if metakey exists those will come first and remaining should come last.
Here is my query
$meta_query_args = array(
'relation' => 'OR', // Optional, defaults to "AND"
array(
'key' => 'user_last_login',
'compare' => 'Not Exists'
),
array(
'key' => 'user_last_login',
'compare' => 'Exists'
)
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$args = array(
'offset' => $paged ? ($paged - 1) * $number : 0,
'number' => $number,
'fields' => 'all',
'orderby'=>'user_last_login',
'exclude' => array(get_current_user_id()),
'meta_query' =>$meta_query
);
$users = get_users( $args );
Please help.
A meta_key
argument is required when you wan to order by meta_value
. Here is the modified code,
$query_args = array(
'relation' => 'OR',
array(
'key' => 'user_last_login',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'user_last_login',
'compare' => 'EXISTS'
)
);
$meta_query = new WP_Meta_Query($query_args);
$args = array(
'offset' => $paged ? ($paged - 1) * $number : 0,
'number' => $number,
'fields' => 'all',
'meta_key' => 'user_last_login',
'orderby' => 'meta_value',
'order' => 'ASC',
'exclude' => array(get_current_user_id()),
'meta_query' => $meta_query
);
$users = get_users( $args );
Hope this one helps.