Authors in Comments

Posted: 27th Mar 2008, in: Snippets, Themery - Older Post - Newer Post

Earlier today Miriam at WordPress Garage posted a quick challenge: how to display a list of authors who had posted in a particular category. I had an idea at the time but I wasn’t in a position to test the idea, so now I am home I have written a quick function to do just that.

The function

These two functions are best placed in your functions.php file or can be added loose to the category template file, either would be fine.

function get_authors_by_cat($cat_id, $sort = true){
 
	$author_id_array = array();
	$author_details_array = array();
 
	$cat_posts = get_posts(‘category=’.(int) $cat_id);
 
	foreach ($cat_posts as $cat_post){
		if (!in_array($cat_post->post_author , $author_id_array)){
			$author_id_array[] = $cat_post->post_author;
			$author_details_array[] = get_userdata($cat_post->post_author);
		}
	}
 
	if ($sort === true ){
		usort($author_details_array , ‘author_by_cat_sort’);
	}
 
	return $author_details_array;
}
 
function author_by_cat_sort($a, $b){
        $al = strtolower($a->display_name);
        $bl = strtolower($b->display_name);
        if ($al == $bl) {
            return 0;
        }
        return ($al > $bl) ? +1 : -1;
}

There are two functions here, the first retrieves all the posts from the category and loops through them to make sure. The second function is a callback for the usort function. This allows the list to be sorted by the display name of the authors.

This could be done more efficiently by querying the database directly but I wanted to avoid that option as a lot of people are not comfortable doing that themselves.

Using the Function

To use the function in your theme you need to include the following in your where you want the list to appear (replacing the number 18 with the ID of the category that you want to list authors for.

<?php
 
$authordata_array = get_authors_by_cat(18, $sort = true);
foreach ($authordata_array as $authordata){
?>
 
	<?php the_author(); ?>
	<?php the_author_posts_link (); ?>
 
<?php
}
 
?>

Notice that in the foreach loop you should be able to use the normal author based template tags. You can find a list at http://codex.wordpress.org/Template_Tags

 

Comments

  1. 1

    Rebecca commented at 10:24 am, 30th 03 2008:

    Thanks for posting this code - I tried it out but got error warnings. I tried putting it in the functions.php and then tried putting it in the category template page with no luck. Did you have success in getting your code to work?

     
  2. 2

    Andrew (http://www.wp-fun.co.uk) commented at 1:20 pm, 30th 03 2008:

    Rebecca,

    I had it working on WordPress 2.5 and 2.3. What errors did you get?

    DId you copy and paste directly or did you change the fancy quotes to normal ones? i.e. the single quotes around the sections in red above?

     

Leave a Reply

I am currently testing a comment link policy which means commenters do not get a link. There is a poll, and open comments for feedback on the comment policy page.

Please note. I am currently using an experimental antispam technique on this blog. If you run into problems please let me know using the Get in Touch link at the top of the page. Thanks, Andy.

Subscribe without commenting

Feed Icon - Get fed with RSS