J'utilise le code suivant pour obtenir les auteurs de mon blog multi-auteurs et les commander en fonction du nombre de messages. Je veux les commander avant la date de leur dernier post
$authors = get_users('role=author&orderby=post_count&order=DESC');
Mettez ceci dans votre functions.php
:
function get_users_ordered_by_post_date($args = '') {
// Prepare arguments
if (is_string($args) && '' !== $args)
parse_str($args, $args);
$asc = (isset($args['order']) && 'ASC' === strtoupper($args['order']));
unset($args['orderby']);
unset($args['order']);
// Get ALL users
$users = get_users($args);
$post_dates = array();
if ($users) {
// For EACH user ...
foreach ($users as $user) {
$ID = $user->ID;
// ... get ALL posts (per default sorted by post_date), ...
$posts = get_posts('author='.$ID);
$post_dates[$ID] = '';
// ... then use only the first (= newest) post
if ($posts) $post_dates[$ID] = $posts[0]->post_date;
}
}
// Sort dates (according to order), ...
if (! $asc)
arsort($post_dates);
// ... then set up user array
$users = array();
foreach ($post_dates as $key => $value) {
// $user = get_userdata($key);
// $users[] = $user->ID;
$users[] = get_userdata($key);
}
return $users;
}
La fonction ci-dessus renvoie un tableau d'objets WP_User .
// EDIT : la fonction supporte maintenant un paramètre args (chaîne ou tableau). La sortie est ordonnée en respectant order=DESC
et order=ASC
. Le paramètre order_by
est retiré (nous voulons quand même classer par date du dernier message), tous les autres paramètres sont passés à get_users
.
Maintenant, vous pouvez utiliser la fonction comme ceci:
get_users_ordered_by_post_date();
ou
get_users_ordered_by_post_date('role=author');
ou
// order by OLDEST post first
get_users_ordered_by_post_date('role=administrator&order=ASC');