Jump to content

At this for 4 hours. Sort users by post count, instead of by name!


hockeyman10

Recommended Posts

I was wondering if anyone could give me a hand. I haven't needed to go to a help site for quite some time lol.

 

I'm having a bit of trouble with this code. It's to list all contributors on my Wordpress blog, but the code lists them by display_name, and I want it to sort by post count. The problem is that post count isn't a var in the authors[] array. How would I get $numposts into the array, and how could I call that in the sort function? Am I missing something really simple here?? Here is my code below:

 

// Use this to sort authors by display name
function sort_authors($a, $b)
{
return strcmp($a['display_name'], $b['display_name']);
         
}

// Output a list of contributors
function contributors() {
$authors = array();

// Get all blog users
$blogusers = get_users_of_blog();
foreach ($blogusers as $bloguser)
{
	// Fetch
	$user = get_userdata($bloguser->user_id);
	$numposts = get_usernumposts($user->ID);

	// Skip if admin or has no posts
	if ($user->user_login == 'admin' || $numposts < 1) continue;
	$authors[] = (array) $user;
              


}









// Sort the authors by display name
usort($authors, 'sort_authors');




// Get the current page
$paged = get_query_var('paged');
if (!$paged) $paged = 1;

// We'll return these at a later stage
$current_page = $paged;
$total_pages = ceil(count($authors) / 10);

// Calculate the starting and ending points
// Assuming we'll be showing 10 authors per page
$start = ($paged - 1) * 10;
$end = $paged * 10;
if ($end > count($authors)) $end = count($authors);

// Loop through the authors
for ($i = $start; $i < $end; $i++)
{



	$author = $authors[$i];

	// Gather data and meta
	$nicename = $author['user_nicename'];
	$display_name = $author['display_name'];
	$avatar = get_avatar($author['ID']);
	$author_profile_url = get_bloginfo('url') . '/author/' . $nicename . '/';
	$website = get_usermeta($author['ID'], 'user_url');
	$twitter = get_usermeta($author['ID'], 'twitter');
	$bio = $author['description'];
$numposts2 = $author['numposts1'];
echo $numposts2;

$numposts = get_usernumposts($author['ID']);





	// Hide if empty
	$twitter = strlen($twitter) > 0 ? 'Twitter: <a href="http://twitter.com/' 

. $twitter . '" target="_blank">@' . $twitter . '</a><br />' : '';
	$website = strlen($website) > 0 ? 'Website: <a href="' . $website . '" 

target="_blank">Visit</a><br />' : '';
	$bio = strlen($bio) > 0 ? 'Bio: ' . substr($bio, 0, 50) . '... <a href="' 

. $author_profile_url . '">Read more</a><br />' : '';


$this_count +=1;
if ($this_count == "5") {
print("<div style=\"clear: both;\"></div>");
$this_count = "0";
}

	// Output the list
print <<<HTML

		<li>
			<a href="{$author_profile_url}">{$avatar}</a>



			<div id="authorname">
<center><a href="{$author_profile_url}" title="View {$display_name}'s Profile">

{$display_name}</a> <span class="postcount">($numposts)</span> </center>

			</div>
		</li>

HTML;
}

// Return an array containing current and total pages
// These values could be used to output pagination
return array(
	'current_page' => $current_page,
	'total_pages' => $total_pages
);
}
print("<div style=\"clear: both;\"></div>");

 

I just need this to sort by the $numposts var, instead of by name. What am I missing here? Can this be done? Thanks a lot in advance to anyone that can give me a hand! :)

Link to comment
Share on other sites

Ok I finally got the var into the array as $authors[post_counter]. I have it sorting with two different codes, but it's sorting backwards. Does anyone know how I can reverse it?

 

usort($authors, 'sorting_authors');

 

function sorting_authors($a, $b)

{

  return strnatcmp($a['post_counter'], $b['post_counter']);

}

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.