Come ottenere il nome dell'autore tramite l'ID dell'autore

23 ott 2013, 18:20:12
Visualizzazioni: 29.2K
Voti: 6

Voglio mostrare i post recenti in questo modo.

<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"]; ?> di
    <?php echo $recent["post_author"]; ?>
      </a>
    </li>
  <?php } ?>
</ul>

Ma $recent["post_author"] restituisce solo l'ID dell'autore. E questo è al di fuori del The Loop, quindi non posso utilizzare la funzione the_author().

Come posso ottenere il nome dell'autore dall'ID? O forse c'è un modo migliore per farlo?

0
Tutte le risposte alla domanda 4
0
13

Prova get_user_by():

get_user_by( $field, $value );

Nel tuo caso, dovresti passare ID e l'ID dell'utente:

// Ottieni l'oggetto utente
$recent_author = get_user_by( 'ID', $recent["post_author"] );
// Ottieni il nome visualizzato dell'utente
$author_display_name = $recent_author->display_name;
23 ott 2013 18:42:52
0
10
echo get_the_author_meta('display_name', $recent["post_author"]);
// codice dalla funzione deprecata @get_author_name

Altri esempi di get_the_author_meta($meta_key, $author_id) li puoi trovare sul Codex.

23 ott 2013 18:42:37
0

La tabella wp_posts, che stai interrogando con wp_get_recent_posts(), non include una colonna con il nome dell'autore. Contiene solo l'ID dell'autore (come hai già scoperto).

Quindi, quello che devi fare è utilizzare un'altra funzione di WordPress chiamata <a href="http://codex.wordpress.org/Function_Reference/get_user_by" rel="nofollow">get_user_by()</a>. Questo ti permetterà di prendere l'ID dell'autore e trovare il corrispondente nome dell'autore.

Qualcosa come questo dovrebbe funzionare (non testato):

<ul id="recent-posts">
<?php foreach( wp_get_recent_posts() as $recent ){

    $user_id = get_user_by('id', $recent["post_author"]);  // Ottieni il nome utente dall'ID utente
        ?>
        <li>
        <a href="<?php echo get_permalink($recent['ID']); ?>">
        <?php echo $recent["post_title"]; ?> di
        <?php echo $user_id->display_name; ?>
        </a>
        </li>
    <?php 
    } ?>
</ul>
23 ott 2013 18:44:05
1
-1

Nel tuo caso questo potrebbe funzionare:

<?php $user_info = get_userdata($recent["post_author"]);
echo $user_info->user_login; ?>
28 apr 2016 13:20:46
Commenti

Immagino che sia stato votato negativamente perché manca la spiegazione e a causa della formattazione, ho corretto la formattazione ma sono sicuro che puoi sistemare l'altra parte. (forse se non abbiamo una corrispondenza utente, $user_info è false e abbiamo un problema con la parte $user_info->user_login ? Ma forse questo non è un problema all'interno del ciclo qui )

birgire birgire
28 apr 2016 13:26:36