Je veux montrer les messages récents comme celui-ci.
<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"]; ?> by
<?php echo $recent["post_author"]; ?>
</a>
</li>
<?php } ?>
</ul>
Mais $recent["post_author"]
ne renvoie que l'id de l'auteur. Et ceci est en dehors de The Loop
, donc je ne peux pas utiliser la fonction the_author()
.
Comment puis-je obtenir le nom de l'auteur à partir de l'ID? Ou peut-être qu'il y a une meilleure façon de le faire?
Essayez get_user_by()
:
get_user_by( $field, $value );
Dans votre cas, vous passeriez ID, et l'ID utilisateur:
// Get user object
$recent_author = get_user_by( 'ID', $recent["post_author"] );
// Get user display name
$author_display_name = $recent_author->display_name;
echo get_the_author_meta('display_name', $recent["post_author"]);
// code from deprecated.php function @get_author_name
D'autres exemples de get_the_author_meta ($ meta_key, $ author_id) vous pouvez trouver au Codex.
La table wp_posts
, qui correspond à celle que vous interrogez avec wp_get_recent_posts()
, n'inclut pas de colonne de nom d'auteur. Il ne porte que l'identifiant de l'auteur (comme vous l'avez déjà découvert).
Donc, vous devez utiliser une autre fonction WordPress appelée get_user_by()
. Cela vous permettra de prendre le auteur ID et de trouver le auteur correspondant .
Quelque chose comme ça devrait marcher (non testé):
<ul id="recent-posts">
<?php foreach( wp_get_recent_posts() as $recent ){
$user_id = get_user_by('id', $recent["post_author"]); // Get user name by user id
?>
<li>
<a href="<?php echo get_permalink($recent['ID']); ?>">
<?php echo $recent["post_title"]; ?> by
<?php echo $user_id->display_name; ?>
</a>
</li>
<?php
} ?>
</ul>