web-dev-qa-db-fra.com

Comment obtenir un identifiant d'auteur en dehors de la boucle

Je ne peux pas obtenir l'ID auteur de l'auteur en dehors de la boucle pour faire fonctionner get_the_author_meta. 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);

Aucune suggestion?

14
Marce Castro

Le moyen le plus simple et le plus direct d'obtenir l'ID auteur de l'auteur en dehors de la boucle, si vous connaissez l'ID de publication, 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, alors, depuis WP 3.1, le plus simple est d'utiliser la fonction get_queried_object_id() (recherchez-la dans la liste des méthodes). 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.

35
Max G J Panas

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

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

Ensuite, il est possible de nous the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
9
Alexander Poslavsky

Cela dépend où vous êtes. Si vous êtes sur une page singulière (par exemple, si vous ne montrez qu'un seul {{Insert Post Type Here}}), vous pouvez utiliser get_queried_object, qui récupérera l'objet post.

<?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 l'objet de publication en cours (l'objet global $post) au début du tableau. L'inconvénient est que cela peut entraîner l'action loop_start bien plus tôt que prévu - ce n'est pas un problème énorme, mais un élément à 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();
3
chrisguitarguy

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

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

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

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

Modifiez ID out en post-id manuellement pour un accès en boucle.

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

2
Ryan Dennler

J'ai eu le même problème ici en essayant de faire un widget qui affiche 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++;
}
0
Richard Dinh