Question

I want to create a page that displays all the blog users ordered by the last login date.

I've tried with the get_users() function and I can succesfully get the users' list, but not in the order I want:

$query = get_users('&offset='.$offset.'&orderby=login&order=DESC&number='.$number); 

I think that the orderby=login is not what I'm looking for... Is there any other way to accomplish this?

Was it helpful?

Solution

First, you need to store the actual login date, because this is not stored by default. You can use this code to do that(use it in your functions.php)

add_action('wp_login','user_last_login', 0, 2);
function user_last_login($login, $user) {  
    $user = get_user_by('login',$login);
    $now = time();
    update_usermeta( $user->ID, 'user_last_login', $now );
}

After that, you can use the meta field to sort the results:

$query = get_users('&offset='.$offset.'&orderby=meta_value&meta_key=user_last_login&order=DESC&number='.$number); 

OTHER TIPS

passatgt's answer can be simplified slightly. No need to grab the user object, when it's already present as the second argument:

add_action( 'wp_login','prefix_save_user_last_login', 0, 2 );
function prefix_save_user_last_login( $login, $user ) {  
    update_usermeta( $user->ID, 'user_last_login', time() );
}
Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top