Seemed interesting, so here is my version. Not sure about get_user_by()
, should be more robust way to get objects for authors.
function my_list_authors() {
$authors = wp_list_authors( array(
'exclude_admin' => false,
'html' => false,
'echo' => false
) );
$authors = explode( ',', $authors );
echo '<ul>';
foreach ( $authors as $author ) {
$author = get_user_by( 'login', $author );
$link = get_author_link( false, $author->ID );
echo "<li><a href="https://wordpress.stackexchange.com/questions/813/{$link}">{$author->display_name}</a><ul>";
$posts = get_posts( array(
'author' => $author->ID,
'numberposts' => -1
) );
$categories = array();
foreach ( $posts as $post )
foreach( get_the_category( $post->ID ) as $category )
$categories[$category->term_id] = $category->term_id;
$output = wp_list_categories( array(
'include' => $categories,
'title_li' => '',
'echo' => false
) );
echo $output . '</ul></li>';
}
echo '</ul>';
}