To list the users with the “top” posts, and display them in posting order, change this part of the code MichaelH used above:
<?php
$order = 'user_nicename';
$user_ids = $wpdb->get_col("SELECT ID FROM $wpdb->users ORDER BY $order"); // query users
foreach($user_ids as $user_id) : // start authors' profile "loop"
$user = get_userdata($user_id);
?>
to this:
<?php
$order = 'postcount';
$limit = '5';
$usersinfo = $wpdb->get_results("SELECT $wpdb->users.ID as ID, COUNT(post_author) as postcount FROM $wpdb->users LEFT JOIN $wpdb->posts ON $wpdb->users.ID = $wpdb->posts.post_author WHERE post_type = 'post' GROUP BY post_author ORDER BY $order DESC LIMIT $limit");
foreach($usersinfo as $userinfo) : // start authors' profile "loop"
$user = get_userdata($userinfo->ID);
$user->postcount = $userinfo->postcount;
?>
Change the $limit
value to the # of users you want to show. To display post count for a user, just use:
<?php echo $user->postcount; ?>