Pergunta

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?

Foi útil?

Solução

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

Outras dicas

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() );
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a wordpress.stackexchange
scroll top