Cómo obtener el nombre del autor mediante su ID

23 oct 2013, 18:20:12
Vistas: 29.2K
Votos: 6

Quiero mostrar las entradas recientes de esta manera.

<ul id="recent-posts">
  <?php foreach( wp_get_recent_posts() as $recent ){ ?>
    <li>
      <a href="<?php echo get_permalink($recent['ID']); ?>">
    <?php echo $recent["post_title"]; ?> por
    <?php echo $recent["post_author"]; ?>
      </a>
    </li>
  <?php } ?>
</ul>

Pero $recent["post_author"] solo devuelve el ID del autor. Y esto está fuera de The Loop, así que no puedo usar la función the_author().

¿Cómo puedo obtener el nombre del autor a partir del ID? ¿O tal vez hay una mejor manera de hacerlo?

0
Todas las respuestas a la pregunta 4
0
13

Prueba con get_user_by():

get_user_by( $field, $value );

En tu caso, pasarías ID y el ID del usuario:

// Obtener objeto de usuario
$recent_author = get_user_by( 'ID', $recent["post_author"] );
// Obtener nombre para mostrar del usuario
$author_display_name = $recent_author->display_name;
23 oct 2013 18:42:52
0
10
echo get_the_author_meta('display_name', $recent["post_author"]);
// código de la función obsoleta @get_author_name

Más ejemplos de get_the_author_meta($meta_key, $author_id) puedes encontrarlos en el Codex.

23 oct 2013 18:42:37
0

La tabla wp_posts, que es la que estás consultando con wp_get_recent_posts(), no incluye una columna con el nombre del autor. Solo contiene el ID del autor (como ya has descubierto).

Por lo tanto, lo que tienes que hacer es usar otra función de WordPress llamada <a href="http://codex.wordpress.org/Function_Reference/get_user_by" rel="nofollow">get_user_by()</a>. Esto te permitirá tomar el ID del autor y encontrar el nombre del autor correspondiente.

Algo como esto debería funcionar (no probado):

<ul id="recent-posts">
<?php foreach( wp_get_recent_posts() as $recent ){

    $user_id = get_user_by('id', $recent["post_author"]);  // Obtener nombre de usuario por ID
        ?>
        <li>
        <a href="<?php echo get_permalink($recent['ID']); ?>">
        <?php echo $recent["post_title"]; ?> por
        <?php echo $user_id->display_name; ?>
        </a>
        </li>
    <?php 
    } ?>
</ul>
23 oct 2013 18:44:05
1
-1

En tu caso esto podría funcionar:

<?php $user_info = get_userdata($recent["post_author"]);
echo $user_info->user_login; ?>
28 abr 2016 13:20:46
Comentarios

Imagino que fue votado negativamente porque le falta la explicación y por el formato. Arreglé el formato pero estoy seguro de que puedes solucionar la otra parte. (tal vez si no tenemos coincidencia de usuario, el $user_info es false y tenemos un problema con la parte de $user_info->user_login ? Pero quizás eso no sea un problema dentro del bucle aquí)

birgire birgire
28 abr 2016 13:26:36