Cómo obtener el ID del autor fuera del bucle

18 sept 2012, 22:29:22
Vistas: 66.4K
Votos: 19

No puedo obtener el ID del autor de la entrada fuera del bucle para hacer funcionar 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 del autor para pasarlo a:

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

¿Alguna sugerencia?

1
Comentarios

mira esto, esto funcionó para mí.

Asaf Chertkoff Asaf Chertkoff
17 dic 2012 19:47:31
Todas las respuestas a la pregunta 8
0
45

La forma más sencilla y directa de obtener el ID del autor de una entrada fuera del bucle, si conoces el ID de la entrada, 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 conoces el ID de la entrada de la página en la que estás, entonces desde WP 3.1 lo más fácil es usar la función get_queried_object_id()(búscala en la lista de Métodos) que funciona incluso fuera del bucle.

$post_id = get_queried_object_id();

Si estos métodos no funcionan para ti, por favor proporciona una explicación más detallada de dónde estás intentando ejecutar tu código y podremos ver si podemos ayudarte más.

3 oct 2013 21:47:01
1
10

Aquí te mostramos cómo obtener el ID del autor fuera del bucle (loop) de WordPress:

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

Luego es posible utilizar the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
26 dic 2012 20:11:16
Comentarios

Esto funciona muy bien si tienes acceso al ID del post. También puedes usar get_the_author_meta('user_nicename', $author_id ) si no quieres mostrar el valor directamente

Andrew M Andrew M
21 dic 2016 11:44:41
0

Depende de dónde te encuentres. Si estás en una página singular (por ejemplo, mostrando solo un único {{Insertar Tipo de Publicación Aquí}}), podrías usar get_queried_object, que obtendrá 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 cualquier otro lugar, podrías 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 falsamente" el bucle y rebobinarlo para obtener el ID del autor. Esto no generará consultas adicionales a la base de datos ni nada por el estilo. WordPress obtiene todas las publicaciones de una vez (al momento de escribir esto). rewind_posts simplemente reinicia la publicación actual (el objeto global $post) al principio del arreglo. La desventaja es que esto puede hacer que la acción loop_start se dispare mucho antes de lo que deseas, no es un gran problema, solo algo que debes tener en cuenta.

<?php
// asegúrate de estar al principio.
rewind_posts();

// inicia el bucle
the_post();

// obtén lo que necesitas
$address = get_the_author_meta('user_email');

// vuelve a la normalidad
rewind_posts();
26 dic 2012 22:35:38
0

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

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

También podrías establecer manualmente el ID de la publicación y obtenerlo de esta manera:

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

Cambia el ID manualmente por el ID de la publicación para acceder fuera del bucle.

No son soluciones perfectas, pero espero que te ayuden.

26 dic 2012 21:42:03
0

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

Utilicé algunas de las sugerencias del segundo consejo de @chrisguitarguy.

Mi código se veía así:

<?php    

$count = 0;
$query_args = array(
      'posts_per_page' => 5, // Número de publicaciones a mostrar
     );
$com_query = new WP_Query( $query_args ); // Crear una nueva consulta WP_Query

$feat_posts = $com_query->posts; // array, para acceder a cada publicación según su posición

while ($com_query->have_posts()) {              
    $com_query->the_post();
        $author_name= get_the_author_meta('user_nicename',  $feat_posts[$count]->post_author); // Obtener el nombre del autor
        $count++;
}
9 abr 2014 22:03:03
0

Espero que esto ayude:

$args= array(
    'post_type' =>'any', // Cualquier tipo de publicación
    'post_status' => 'publish', // Solo publicaciones publicadas
    'order' => 'ASC', // Orden ascendente
    'posts_per_page' => '-1' // Todos los posts
);
$posts = new WP_Query($args);
$posts = $posts->posts;   

foreach($posts as $post) { 
  switch ($post->post_type) {
     case 'page': 
           // Obtener el ID del autor a través del post o página
           $id = get_post_field( 'post_author', $post->ID);
           // El primer parámetro es el nombre del autor 
           // del post o página y el segundo parámetro 
           // es el ID con el que la función obtiene el nombre del autor.
           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);
  }
}
28 dic 2019 06:12:54
0

Para obtener el ID del autor fuera del bucle (loop):

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

Luego usa:

get_the_author_meta('nombre_del_campo', $author_id)

Recuerda que si estás obteniendo IDs de publicaciones dentro del bucle y accediendo al autor fuera del bucle, solo proporcionará los datos del último ID de publicación en el bucle.

28 dic 2019 10:41:44
3
-2

¿Por qué no usas the_author_meta

<p>La dirección de correo electrónico para el usuario con ID 25 es <?php the_author_meta('user_email',25); ?></p>

Esto puede ser utilizado dentro del bucle (loop)

19 sept 2012 00:58:41
Comentarios

Gracias, pero el problema es que estoy fuera del bucle y no puedo solucionarlo. Cuando estás fuera del bucle, es necesario proporcionar el segundo argumento ($author_id).

Marce Castro Marce Castro
19 sept 2012 01:16:23

¡Bump! ¿Alguna idea? Me está volviendo loco :-/

Marce Castro Marce Castro
21 sept 2012 21:41:42

fuera del bucle - por favor, ten en cuenta la pregunta.

Christine Cooper Christine Cooper
26 dic 2012 20:28:37