Ordene a los usuarios en la fecha de su última publicación

2

Utilizo el siguiente código para obtener los autores de mi blog de varios autores y los ordeno por su cuenta de publicaciones. Quiero ordenarlos antes de la fecha de su última publicación

$authors = get_users('role=author&orderby=post_count&order=DESC');
    
pregunta Midhun 18.04.2013 - 12:16

1 respuesta

5

Pon esto en tu 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 función anterior devuelve una matriz de objetos WP_User .

// EDIT : la función ahora admite un parámetro args (cadena o matriz). La salida se ordena con respecto a order=DESC y order=ASC . El parámetro order_by es eliminar (queremos ordenar por fecha de última publicación de todos modos), todos los demás parámetros se pasan a get_users .

Ahora, puedes usar la función así:

get_users_ordered_by_post_date();

o

get_users_ordered_by_post_date('role=author');

o

// order by OLDEST post first
get_users_ordered_by_post_date('role=administrator&order=ASC');
    
respondido por el tfrommen 18.04.2013 - 12:27

Lea otras preguntas en las etiquetas