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

Dejar un comentario

*
*

 

No hay trackbacks