Как получить имя автора по ID автора
Я хочу показать последние записи следующим образом.
<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"]; ?> от
<?php echo $recent["post_author"]; ?>
</a>
</li>
<?php } ?>
</ul>
Но $recent["post_author"]
возвращает только ID автора. И это находится вне The Loop
, поэтому я не могу использовать функцию the_author()
.
Как я могу получить имя автора по ID? Или, может быть, есть лучший способ сделать это?

Попробуйте функцию get_user_by()
:
get_user_by( $field, $value );
В вашем случае нужно передать ID и идентификатор пользователя:
// Получаем объект пользователя
$recent_author = get_user_by( 'ID', $recent["post_author"] );
// Получаем отображаемое имя пользователя
$author_display_name = $recent_author->display_name;

echo get_the_author_meta('display_name', $recent["post_author"]);
// код из устаревшей функции @get_author_name
Больше примеров использования get_the_author_meta($meta_key, $author_id) вы можете найти в Codex.

Таблица wp_posts
, которую вы запрашиваете с помощью wp_get_recent_posts()
, не содержит столбца с именем автора. В ней хранится только ID автора (как вы уже выяснили).
Поэтому вам нужно использовать другую функцию WordPress под названием <a href="http://codex.wordpress.org/Function_Reference/get_user_by" rel="nofollow">get_user_by()</a>
. Она позволит вам по ID автора получить соответствующее имя автора.
Что-то вроде этого должно сработать (не тестировано):
<ul id="recent-posts">
<?php foreach( wp_get_recent_posts() as $recent ){
$user_id = get_user_by('id', $recent["post_author"]); // Получаем имя пользователя по его ID
?>
<li>
<a href="<?php echo get_permalink($recent['ID']); ?>">
<?php echo $recent["post_title"]; ?> от
<?php echo $user_id->display_name; ?>
</a>
</li>
<?php
} ?>
</ul>

Я предполагаю, что ответ был отклонён из-за отсутствия объяснения и из-за форматирования. Я исправил форматирование, но уверен, что вы сможете исправить и остальное. (возможно, если у нас нет совпадения пользователя, то $user_info
будет false
, и у нас возникнет проблема с частью $user_info->user_login
? Но, возможно, это не проблема в данном цикле)
