Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo crear listas de autores y colaboradores por separado en WordPress

Imago voragine.net

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

    • Por eBuho

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

×

Responder al comentario de eBuho

*
*

 

No hay trackbacks