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?

Était-ce utile?

La 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); 

Autres conseils

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() );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top