Comment obtenir un ID auteur en dehors de la boucle

12

Je ne parviens pas à obtenir l'ID de l'auteur de publication en dehors de la boucle pour que get_the_author_meta fonctionne. Jusqu'à présent, j'ai essayé différentes approches:

1.

$author_id=$post->post_author;

2.

global $post;
$author_id=$post->post_author;

3.

$post_tmp = get_post($post_id);
$author_id = $post_tmp->post_author;

4.

$author_id = $posts[0]->post_author;

J'ai besoin de l'identifiant de l'auteur pour le transmettre à:

$address = get_the_author_meta('user_email', $author_id);

Des suggestions?

    
posée Marce Castro 18.09.2012 - 21:29

6 réponses

33

Si vous connaissez l'identifiant de publication, le moyen le plus simple et le plus simple d'obtenir l'ID auteur de publication en dehors de la boucle consiste à utiliser la fonction principale de WordPress get_post_field() .

$post_author_id = get_post_field( 'post_author', $post_id );

Si vous ne connaissez pas encore l'ID de publication de la page sur laquelle vous vous trouvez, la chose la plus simple à faire depuis WP 3.1 est d'utiliser get_queried_object_id() (recherchez-le dans la liste des méthodes), fonction qui fonctionne même en dehors de la boucle.

$post_id = get_queried_object_id();

Si cela ne fonctionne pas pour vous, donnez une explication plus détaillée de l'emplacement où vous essayez d'exécuter votre code et nous pourrons voir si nous pouvons vous aider davantage.

    
réponse donnée Max G J Panas 03.10.2013 - 20:47
9

Voici comment obtenir et obtenir l'identifiant de l'auteur en dehors de la boucle WordPress:

<?php
global $post;
$author_id=$post->post_author;
?>

Alors il nous est possible the_author_meta :

<?php
the_author_meta( 'user_nicename', $author_id );
?>
    
réponse donnée Alexander Poslavsky 26.12.2012 - 19:11
3

Cela dépend de l'endroit où vous vous trouvez. Si vous êtes sur une page unique (par exemple, si vous affichez un seul {{Insérer un type de publication ici}}), vous pouvez utiliser get_queried_object , qui récupérera l'objet de publication.

<?php
if (is_singular()) {
    $author_id = get_queried_object()->post_author;
    $address = get_the_author_meta('user_email', $author_id);
}

Si vous êtes ailleurs, vous pouvez utiliser l'objet global $wp_query et vérifier sa propriété $posts . Cela devrait également fonctionner sur des pages uniques.

<?php
global $wp_query;
if (!empty($wp_query->posts)) {
    $author_id = $wp_query->posts[0]->post_author;
    $address = get_the_author_meta('user_email', $author_id);
}

Vous pouvez également simplement "démarrer faussement" la boucle et la rembobiner pour saisir l'identifiant de l'auteur. Cela n'entraînera aucun succès supplémentaire dans la base de données ou autre. WordPress récupère tous les messages à la fois (au moment de la rédaction). rewind_posts réinitialise simplement la publication en cours (l'objet global $post ) au début du tableau. L’inconvénient est que cela peut amener l’action loop_start à se déclencher bien plus tôt que prévu - ce n’est pas une grosse affaire, mais une chose à prendre en compte.

<?php
// make sure you're at the beginning.
rewind_posts();

// start the loop
the_post();

// get what you need
$address = get_the_author_meta('user_email');

// back to normal
rewind_posts();
    
réponse donnée chrisguitarguy 26.12.2012 - 21:35
2

Cela semble fonctionner en dehors de la boucle, peut-être que cela vous aidera.

    $thelogin = get_query_var('author_name');
    $theauthor = get_userdatabylogin($thelogin);

Vous pouvez également définir manuellement l'identifiant de publication et la saisir de cette manière:

global $wp_query;
$thePostID = $wp_query->post->ID;
$postdata = get_post($thePostID, ARRAY_A);
$authorID = $postdata['post_author'];

Modifiez l'ID en sortie afin de l'identifier manuellement pour un accès en boucle.

Pas de bonnes solutions, mais j'espère que cela aidera.

    
réponse donnée Ryan Dennler 26.12.2012 - 20:42
0

J'ai eu le même problème ici lorsque j'essayais de créer un widget affichant les messages en vedette avec des informations sur l'auteur.

J'ai utilisé une partie de l'allusion de @chrisguitarguy 2nd tip.

Mon code ressemblait à ceci:

<?php    

$count = 0;
$query_args = array(
      'posts_per_page' => 5,
     );
$com_query = new WP_Query( $query_args );

$feat_posts = $com_query->posts; // array, so we can access each post based on position

while ($com_query->have_posts()) {              
    $com_query->the_post();
        $author_name= get_the_author_meta('user_nicename',  $feat_posts[$count]->post_author);
        $count++;
}
    
réponse donnée Richard Dinh 09.04.2014 - 21:03
-2

Pourquoi n'utilisez-vous pas the_author_meta

<p>The email address for user id 25 is <?php the_author_meta('user_email',25); ?></p>

Ceci peut être utilisé dans la boucle

    
réponse donnée Kuldeep Daftary 18.09.2012 - 23:58

Lire d'autres questions sur les étiquettes