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;
}