Comment sortir l'ID de l'auteur en dehors de la boucle


16

Je ne peux pas obtenir l'ID de l'auteur du post 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'ID de l'auteur pour le transmettre à:

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

Aucune suggestion?


vérifiez cela , cela a fonctionné pour moi.
Asaf Chertkoff

Réponses:


38

La façon la plus simple et la plus directe d'obtenir l'ID de l'auteur du post en dehors de la boucle, si vous connaissez l'ID du post, est d'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, la chose la plus simple à faire 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 ceux-ci ne fonctionnent pas pour vous, veuillez donner une explication plus détaillée de l'endroit où vous essayez d'exécuter votre code et nous pouvons voir si nous pouvons vous aider davantage.


9

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

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

Il nous est alors possible the_author_meta:

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

Cela fonctionne très bien si vous avez accès à l'ID du message. Vous pouvez également utiliser get_the_author_meta ('user_nicename', $ author_id) si vous ne voulez pas afficher la valeur immédiatement
Andrew M

3

Cela dépend de l'endroit où vous vous trouvez. Si vous êtes sur une page singulière (par exemple, ne montrant qu'un seul {{Insérer le 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' $wp_queryobjet global et vérifier sa $postspropriété. Cela devrait également fonctionner sur des pages singulières.

<?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 faux" la boucle et la rembobiner pour récupérer l'ID de l'auteur. Cela n'encourra pas de hits de base de données supplémentaires ou similaires. WordPress récupère tous les articles à la fois (au moment de la rédaction). rewind_postsréinitialise simplement l'objet courant (global $post) au début du tableau. L'inconvénient est que cela peut entraîner le déclenchement de l' loop_startaction bien plus tôt que vous le souhaitez - pas une grosse affaire, juste quelque chose à savoir.

<?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();

2

Il semble que cela fonctionne 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'ID de la publication et la saisir de cette façon:

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

Modifiez l'ID pour publier l'ID manuellement pour un accès hors de la boucle.

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


0

J'ai eu le même problème ici en essayant de créer un widget qui affiche les articles en vedette avec des informations sur l'auteur.

J'ai utilisé certaines des astuces 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

Pour obtenir et obtenir l'ID de l'auteur en dehors de la boucle:

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

Ensuite, utilisez

get_the_author_meta('field_name', $author_id)

rappelez-vous que si vous récupérez l'id de messages en boucle et accédez à la boucle côté auteur, alors il ne fournira que les données du dernier id de message en boucle


0

J'espère que cela vous aidera:

$args= array(
    'post_type' =>'any',
    'post_status' => 'publish',
    'order' => 'ASC',
    'posts_per_page' => '-1'
);
$posts = new WP_Query($args);
$posts = $posts->posts;   

foreach($posts as $post) { 
  switch ($post->post_type) {
     case 'page': 
           // get the author's id through the post or page
           $id = get_post_field( 'post_author', $post->ID);
           // the first parameter is the name of the author 
           // of the post or page and the second parameter 
           // is the id with which the function obtains the name of the author.
           echo get_the_author_meta('display_name', $id);
        break;
    case 'post': 
         $id = get_post_field( 'post_author', $post->ID;
        echo get_the_author_meta('display_name', $id);
  }
}

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

Cela peut être utilisé dans la boucle


Merci, mais le problème est que je suis en dehors de la boucle et que je ne peux pas résoudre ce problème. Lorsque vous êtes en dehors de la boucle, le deuxième argument ($ author_id) doit être fourni.
Marce Castro

Bosse! Des idées? Ça me rend fou: - /
Marce Castro

4
en dehors de la boucle - veuillez noter la question.
Christine Cooper
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.