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?

有帮助吗?

解决方案

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

其他提示

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() );
}
许可以下: CC-BY-SA归因
scroll top