La función que genera una lista de autores en WordPress, wp_list_authors(), no permite discriminar entre distintos tipos de usuario, por ejemplo entre autores y colaboradores. Si queremos hacer algo así debemos consultar directamente a la base de datos y extraer la información.
Matt Varone publicó hace tiempo en su blog un tutorial completo para generar listas de usuarios discriminadas, y cómo ordenarlas según los diferentes registros que almacena la tabla de usuarios de la base de datos de WordPress. El código publicado está muy bien comentado y es fácilmente adaptable a cada caso que se necesite.
<?php
/*
First we set how we'll want to sort the user list.
You could sort them by:
------------------------
* ID - User ID number.
* user_login - User Login name.
* user_nicename - User Nice name ( nice version of login name ).
* user_email - User Email Address.
* user_url - User Website URL.
* user_registered - User Registration date.
*/
$szSort = "user_nicename";
/*
Now we build the custom query to get the ID of the users.
*/
$aUsersID = $wpdb->get_col( $wpdb->prepare(
"SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY %s ASC"
, $szSort ));
/*
Once we have the IDs we loop through them with a Foreach statement.
*/
foreach ( $aUsersID as $iUserID ) :
/*
We use get_userdata() function with each ID.
*/
$user = get_userdata( $iUserID );
/*
Here we finally print the details wanted.
Check the description of the database tables linked above to see
all the fields you can retrieve.
To echo a property simply call it with $user->name_of_the_column.
In this example I print the first and last name.
*/
echo '<li>' . ucwords( strtolower( $user->first_name . ' ' . $user->last_name ) ) . '</li>';
/*
The strtolower and ucwords part is to be sure
the full names will all be capitalized.
*/
endforeach; // end the users loop.
?>
Por otro lado, wp_list_authors() tampoco permite mostrar avatars de autores. Con el mismo procedimiento, en bavotasan.com explican cómo añadir esta imagen asociada a cada autor.
function contributors() {
global $wpdb;
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users ORDER BY display_name");
foreach($authors as $author) {
echo "<li>";
echo "<a href=\"".get_bloginfo('url')."/?author=";
echo $author->ID;
echo "\">";
echo get_avatar($author->ID);
echo "</a>";
echo '<div>';
echo "<a href=\"".get_bloginfo('url')."/?author=";
echo $author->ID;
echo "\">";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "</div>";
echo "</li>";
}
}
1 comentario
Solo una observación en la linea
$user = get_userdata( $iUserID );
debe especificarse un id mas no el objeto. dado que get_userdata trae los datos de un ID específico. En mi caso quedó asi:
function cumplemes() {
global $wpdb;
$authors = $wpdb->get_results(«SELECT $wpdb->users.ID from $wpdb->users»);
foreach($authors as $author) :
$user = get_userdata($author->ID);
echo ‘‘ . ucwords( strtolower( $user->first_name . ‘ ‘ . $user->last_name ) ) . ‘‘;
endforeach;
}