Cómo obtener una ID de autor fuera del bucle

12

No puedo obtener el ID de autor de la publicación fuera del bucle para hacer que funcione get_the_author_meta. Hasta ahora he probado diferentes enfoques:

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;

Necesito el ID de autor para pasarlo a:

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

¿Alguna sugerencia?

    
pregunta Marce Castro 18.09.2012 - 21:29

6 respuestas

33

La forma más sencilla y directa de obtener la ID del autor de la publicación fuera del bucle, si conoce la ID de la publicación, es usar la función principal de WordPress get_post_field() .

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

Si aún no conoce el ID de publicación de la página en la que se encuentra, desde WP 3.1 lo más fácil es usar get_queried_object_id() (búsquelo en la lista de Métodos) que funciona incluso fuera del bucle.

$post_id = get_queried_object_id();

Si esto no funciona para usted, proporcione una explicación más detallada de dónde intenta ejecutar su código y podemos ver si podemos ayudarlo más.

    
respondido por el Max G J Panas 03.10.2013 - 20:47
9

Aquí se explica cómo obtener y obtener el ID de autor fuera del bucle de WordPress:

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

Entonces es posible para nosotros the_author_meta :

<?php
the_author_meta( 'user_nicename', $author_id );
?>
    
respondido por el Alexander Poslavsky 26.12.2012 - 19:11
3

Depende de donde estés. Si está en una página singular (por ejemplo, solo muestra un solo {{Insert Post Type Here}}), puede usar get_queried_object , que recuperará el objeto de la publicación.

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

Si estás en otro lugar, puedes usar el objeto global $wp_query y verificar su propiedad $posts . Esto también debería funcionar en 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);
}

También puedes simplemente "iniciar en falso" el bucle y rebobinarlo para obtener el ID de autor. Esto no incurrirá en ningún golpe de base de datos adicional o similar. WordPress recupera todos los mensajes a la vez (en el momento de la escritura). rewind_posts simplemente restablece el objeto de la publicación actual (el $post global) al principio de la matriz. La desventaja es que esto puede hacer que la acción loop_start se dispare mucho antes de lo que usted quiere, no es un gran problema, solo es algo que debe tener en cuenta.

<?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();
    
respondido por el chrisguitarguy 26.12.2012 - 21:35
2

Parece que funciona fuera del bucle, tal vez esto ayude.

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

También puedes establecer manualmente la ID de la publicación y capturarla de esta forma:

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

Cambie la ID para publicar la ID manualmente para el acceso fuera del bucle.

No son grandes soluciones, pero espero que ayude.

    
respondido por el Ryan Dennler 26.12.2012 - 20:42
0

Tuve el mismo problema aquí cuando intenté crear un widget que mostrara publicaciones destacadas con información del autor.

Utilicé algunos de los consejos del segundo consejo de @chrisguitarguy.

Mi código se veía así:

<?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++;
}
    
respondido por el Richard Dinh 09.04.2014 - 21:03
-2

¿Por qué no usas the_author_meta

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

Esto se puede utilizar dentro del bucle

    
respondido por el Kuldeep Daftary 18.09.2012 - 23:58

Lea otras preguntas en las etiquetas