obtener el ID del autor de la publicación fuera del loop
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;

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.

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

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

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

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.

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.
