Como obter o ID de Autor fora do loop

12

Não consigo colocar o ID do autor da postagem fora do loop para fazer o trabalho get_the_author_meta. Até agora eu 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 passá-lo para:

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

Alguma sugestão?

    
por Marce Castro 18.09.2012 / 21:29

6 respostas

33

A maneira mais simples e direta de obter o ID do autor da postagem fora do loop, se você souber o ID do post, é 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 do post da página em que está, então, desde o WP 3.1, o mais fácil é usar o get_queried_object_id() (procure na lista de métodos) a função que funciona mesmo fora do loop.

$post_id = get_queried_object_id();

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

    
por Max G J Panas 03.10.2013 / 20:47
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 );
?>
    
por Alexander Poslavsky 26.12.2012 / 19:11
3

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

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

Se você estiver em qualquer outro lugar, você pode usar o objeto global $wp_query e verificar sua propriedade $posts . Isso também deve funcionar 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 apenas "iniciar falsamente" o loop e retroceder para obter o ID do autor. Isso não causará nenhum acerto de banco de dados adicional ou algo semelhante. WordPress busca todos os posts de uma só vez (no momento da escrita). rewind_posts apenas redefine o objeto atual da postagem (o global $post ) para o início da matriz. A desvantagem é que isso pode fazer com que a ação loop_start seja disparada mais cedo do que você deseja - não é um grande problema, apenas algo em que você deve 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();
    
por chrisguitarguy 26.12.2012 / 21:35
2

Isso 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 a ID da postagem e pegá-la desta maneira:

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

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

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

    
por Ryan Dennler 26.12.2012 / 20:42
0

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

Eu usei algumas dicas da segunda dica do @chrisguitarguy.

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++;
}
    
por Richard Dinh 09.04.2014 / 21:03
-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

    
por Kuldeep Daftary 18.09.2012 / 23:58

Tags