get post id do autor fora do loop

13

Eu preciso colocar no metabox do painel de postagem pós-edição com e-mail do autor da postagem (ou outros campos de meta do usuário). Por isso, pode ser editado quando o admin revê este post.

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

$meta_box = array(
    'id' => 'my-meta-box',
    'title' => 'DANE FIRMY',
    'page' => 'post',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(
        array(
            'name' => 'E-mail box',
            'id' => 'mail',
            'type' => 'text',
            'std' => $meta_id
        )
    )
);

Este código funciona quando $ user_id é um inteiro (quando eu coloco manualmente lá, por exemplo, 4), mas eu quero dinamicamente obter o ID do autor atual ( $user_id ).

get_the_author_meta('user_mail') deve funcionar sem especificar $user_id (codex diz que :)), mas o código está em functions.php e fora do loop, então não funciona. Estou começando com o Wordpress e PHP, então não sei o que fazer a seguir.

Também tentei isso:

global $post;
$user_id=$post->post_author;
    
por th3rion 23.10.2013 / 23:52

3 respostas

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

Com essa função, consegui exibir o e-mail do post do autor na tela de edição posterior. Ainda não sei como fazer isso funcionar com meta-campo personalizado, mas acho que estou mais perto agora.

    
por th3rion 24.10.2013 / 08:03
19

A maneira mais fácil seria usar get_post_field() :

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

Para obter mais detalhes sobre esse problema, consulte esta resposta do StackOverflow .

    
por Mayeenul Islam 12.06.2015 / 13:35
6

Você pode usar o seguinte:

/**
 * Gets the author of the specified post. Can also be used inside the loop
 * to get the ID of the author of the current post, by not passing a post ID.
 * Outside the loop you must pass a post ID.
 *
 * @param int $post_id ID of post
 * @return int ID of post author
*/
function wpse119881_get_author( $post_id = 0 ){
     $post = get_post( $post_id );
     return $post->post_author;
}
    
por Stephen Harris 24.10.2013 / 00:21