Como obter o ID do autor fora do loop

16

Não consigo obter o ID do autor da postagem fora do loop para fazer o get_the_author_meta funcionar. Até agora, tentei abordagens diferentes:

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;

Eu preciso do ID do autor para transmiti-lo para:

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

Alguma sugestão?

Marce Castro
fonte
veja isso , funcionou para mim.
Asaf Chertkoff

Respostas:

38

A maneira mais simples e direta de obter o ID do autor da postagem fora do loop, se você souber o ID da postagem, é usar a função principal do WordPress get_post_field().

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

Se você ainda não conhece o ID da postagem da página em que está, então, como o WP 3.1, a coisa mais fácil a fazer é usar a função get_queried_object_id()(procure na lista de Métodos) que funciona mesmo fora do loop.

$post_id = get_queried_object_id();

Se isso não funcionar, dê uma explicação mais detalhada de onde você está tentando executar seu código e podemos ver se podemos ajudar mais.

Max GJ Panas
fonte
9

Veja como obter e obter o ID do autor fora do loop do WordPress:

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

Então é possível para nós the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
Alexander Poslavsky
fonte
Isso funciona muito bem se você tiver acesso ao ID da postagem. Você também pode usar get_the_author_meta ( 'user_nicename', $ author_id) se você não desejar emitir o valor imediato
Andrew M
3

Depende de onde você está. Se você estiver em uma página singular (por exemplo, apenas mostrando um único {{Insert Post Type Here}}), você pode usar o get_queried_objectque buscará o objeto de postagem.

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

Se você estiver em outro lugar, poderá usar o $wp_queryobjeto global e verificar sua $postspropriedade. Isso deve funcionar também em páginas singulares.

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

Você também pode simplesmente "iniciar falso" o loop e retroceder para obter o ID do autor. Isso não acarreta nenhum acerto adicional no banco de dados ou algo semelhante. O WordPress busca todas as postagens de uma só vez (no momento da redação). rewind_postsapenas redefine o $postobjeto de postagem atual (o global ) para o início da matriz. A desvantagem é que isso pode fazer com que a loop_startação seja acionada mais cedo do que você deseja - não é um grande negócio, apenas algo para estar ciente.

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

Parece que funciona fora do loop, talvez isso ajude.

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

Você também pode definir manualmente o ID da postagem e pegar desta maneira:

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

Altere o ID out para postar o ID manualmente para acesso fora do loop.

Não são ótimas soluções, mas espero que ajude.

Ryan Dennler
fonte
0

Eu tive o mesmo problema aqui ao tentar criar um widget que exibisse postagens em destaque com informações do autor.

Eu usei algumas das dicas da @chrisguitarguy 2nd tip.

Meu código ficou assim:

<?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++;
}
Richard Dinh
fonte
0

Para obter e obter o ID do autor fora do loop:

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

Então use

get_the_author_meta('field_name', $author_id)

lembre-se se você está buscando o ID da postagem no loop e acessando o loop lateral do autor, ele fornecerá apenas dados do último ID da postagem no loop

Manish Chaubey
fonte
0

Espero que isso ajude:

$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);
  }
}
Alejandro Jose Velasquez Valle
fonte
-2

Por que você não usa the_author_meta

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

Isso pode ser usado dentro do loop

Kuldeep Daftary
fonte
Obrigado, mas o problema é que estou fora do loop e não consigo consertar isso. Quando você está fora do loop, o segundo argumento ($ author_id) precisa ser fornecido.
Marce Castro
Colisão! Alguma ideia? Está me deixando louco: - /
Marce Castro 21/09
4
fora do loop - observe a pergunta.
Christine Cooper