obtener el ID del autor de la publicación fuera del loop

24 oct 2013, 00:52:37
Vistas: 66.5K
Votos: 21

Necesito colocar en el panel de control de edición de publicaciones un metabox con el correo electrónico del autor (u otros campos meta de usuario). De esta manera puede editarse cuando el administrador revisa esta publicación.

$meta_id = get_the_author_meta( 'user_email', $user_id );

$meta_box = array(
    'id' => 'my-meta-box',
    'title' => 'DATOS DE LA EMPRESA',
    'page' => 'post',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(
        array(
            'name' => 'Buzón de correo',
            'id' => 'mail',
            'type' => 'text',
            'std' => $meta_id
        )
    )
);

Este código funciona cuando $user_id es un número entero (cuando coloco manualmente por ejemplo 4) pero quiero obtener dinámicamente el ID del autor actual ($user_id).

get_the_author_meta('user_mail') debería funcionar sin especificar $user_id (el codex lo dice :)) pero el código está en functions.php y fuera del loop así que no funciona. Estoy empezando con WordPress y PHP así que no sé qué hacer a continuación.

También intenté esto:

global $post;
$user_id=$post->post_author;
0
Todas las respuestas a la pregunta 3
0
40

La forma más fácil sería usando get_post_field():

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

Para más detalles sobre este tema: echa un vistazo a esta respuesta en StackOverflow.

12 jun 2015 14:35:50
4

Puedes usar lo siguiente:

/**
 * Obtiene el autor del post especificado. También se puede usar dentro del loop
 * para obtener el ID del autor del post actual, sin pasar un ID de post.
 * Fuera del loop debes pasar un ID de post.
 *
 * @param int $post_id ID del post
 * @return int ID del autor del post
*/
function wpse119881_get_author( $post_id = 0 ){
     $post = get_post( $post_id );
     return $post->post_author;
}
24 oct 2013 01:21:09
Comentarios

Mmm, no funciona para mí - creo que la función debe estar enganchada a uno de los filtros pero no sé a cuál.

th3rion th3rion
24 oct 2013 09:22:56

A mí me funciona... ¿estás seguro de que le estás pasando un ID de post (válido)?

Stephen Harris Stephen Harris
24 oct 2013 16:04:43

Pero quiero mostrar este campo meta en la pantalla de edición para cada post (no solo para uno) y el autor del post puede ser diferente, así que el $post_id debe cargarse dinámicamente según la pantalla de edición.

th3rion th3rion
24 oct 2013 16:17:43

Establece $post_id dinámicamente. Si lo usas dentro de un metabox, tu función de callback del metabox recibirá el objeto $post. Por lo que puedes usar $post->ID (Probablemente también podrías usar directamente $post->post_author para ese meta.

Stephen Harris Stephen Harris
24 oct 2013 19:12:15
1
add_action( 'edit_form_after_title', 'myprefix_edit_form_after_title' );
function myprefix_edit_form_after_title() {
    global $post;
    $author_id=$post->post_author;
    $authord = get_the_author_meta( 'user_email', $author_id);
    echo $authord;
}

Con esta función logré mostrar el correo electrónico del autor de la publicación en la pantalla de edición del post. Todavía no sé cómo hacer que funcione con campos meta personalizados, pero creo que estoy más cerca ahora.

24 oct 2013 09:03:03
Comentarios

También es tu propia pregunta. Puedes editarla para aclarar.

Andy Jacobs Andy Jacobs
17 jun 2014 04:08:52