Как получить имя автора по ID автора

23 окт. 2013 г., 18:20:12
Просмотры: 29.2K
Голосов: 6

Я хочу показать последние записи следующим образом.

<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? Или, может быть, есть лучший способ сделать это?

0
Все ответы на вопрос 4
0
13

Попробуйте функцию 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;
23 окт. 2013 г. 18:42:52
0
10
echo get_the_author_meta('display_name', $recent["post_author"]);
// код из устаревшей функции @get_author_name

Больше примеров использования get_the_author_meta($meta_key, $author_id) вы можете найти в Codex.

23 окт. 2013 г. 18:42:37
0

Таблица 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>
23 окт. 2013 г. 18:44:05
1
-1

В вашем случае это может сработать:

<?php $user_info = get_userdata($recent["post_author"]);
echo $user_info->user_login; ?>
28 апр. 2016 г. 13:20:46
Комментарии

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

birgire birgire
28 апр. 2016 г. 13:26:36