web-dev-qa-db-fra.com

Commandez les utilisateurs par la date de leur dernier message

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');
2
Midhun

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');
5
tfrommen