wordpresssql-order-bymeta-key

Get all wp_users sort by metakey


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.


Solution

  • 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.