Como obter o nome do autor pelo id do autor

3

Eu quero mostrar posts recentes como este.

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

Mas $recent["post_author"] retorna apenas o ID do autor. E isso está fora de The Loop , então não posso usar a função the_author() .

Como posso obter o nome do autor do ID? Ou talvez exista uma maneira melhor de fazer isso?

    
por ironsand 23.10.2013 / 17:20

4 respostas

8

Experimente get_user_by() :

get_user_by( $field, $value );

No seu caso, você passaria a ID e o ID do usuário:

// Get user object
$recent_author = get_user_by( 'ID', $recent["post_author"] );
// Get user display name
$author_display_name = $recent_author->display_name;
    
por Chip Bennett 23.10.2013 / 17:42
8
echo get_the_author_meta('display_name', $recent["post_author"]);
// code from deprecated.php function @get_author_name

Mais exemplos de get_the_author_meta ($ meta_key, $ author_id) você pode encontrar no Codex.

    
por Butuzov 23.10.2013 / 17:42
0

A tabela wp_posts , que você está consultando com wp_get_recent_posts() , não inclui uma coluna de nome de autor. Ele carrega apenas o ID do autor (como você já descobriu).

Então, o que você precisa fazer é usar outra função do WordPress chamada get_user_by() . Isso permitirá que você pegue o ID do autor e encontre o nome do autor correspondente.

Algo como isso deve funcionar (não testado):

<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>
    
por josh 23.10.2013 / 17:44
-1

No seu caso, isso pode funcionar:

<?php $user_info = get_userdata($recent["post_author"]);
echo $user_info->user_login; ?>
    
por Znith 28.04.2016 / 12:20

Tags