Cómo obtener el nombre del autor mediante su ID
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?

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;

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.

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>

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í)
