3

I want to show recent posts like this.

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

But $recent["post_author"] returns only id of author. And this is outside The Loop, so I can't use the_author() function.

How can I get author's name from ID? Or maybe there is a better way to do it?

8

Try get_user_by():

get_user_by( $field, $value );

In your case, you'd pass ID, and the user ID:

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

More examples of get_the_author_meta($meta_key, $author_id) you can find at Codex.

0

The wp_posts table, which is the one you are querying with wp_get_recent_posts() does not include an author name column. It only carries the author ID (as you have already found out).

So, what you have to do is use another WordPress function called get_user_by(). This will allow you to take the author ID and find the corresponding author name.

Something like this should work (untested):

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

In your case this could work:

<?php $user_info = get_userdata($recent["post_author"]);
echo $user_info->user_login; ?>
  • 2
    I imagine that it was downvoted becaue it's missing the explanation and becaue of the formatting, I fixed the formatting but I'm sure you can fix the other part. (maybe if we don't have a user match, the $user_info is false and we have a problem with the $user_info->user_login part ? But maybe that's not a problem within the loop here ) – birgire Apr 28 '16 at 10:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.