получить идентификатор автора сообщения вне цикла

17

Мне нужно разместить в метабоксе панели редактирования сообщений сообщение электронной почты автора сообщения (или другие мета-поля пользователя). Так что это может быть отредактировано, когда администратор просматривает этот пост.

$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
        )
    )
);

Этот код работает, когда $ user_id является целым числом (когда я помещаю туда, например, 4), но я хочу динамически получить текущий идентификатор автора ( $user_id).

get_the_author_meta('user_mail')должен работать без указания $user_id(кодекс говорит, что :)), но код находится внутри functions.phpи вне цикла, поэтому он не работает. Я начинаю с Wordpress и PHP, поэтому я не знаю, что делать дальше.

Также попробовал это:

global $post;
$user_id=$post->post_author;
th3rion
источник

Ответы:

31

Самый простой способ будет использовать get_post_field():

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

Для более подробной информации по этой проблеме: взгляните на этот ответ StackOverflow .

Mayeenul Ислам
источник
9

Вы можете использовать следующее:

/**
 * 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;
}
Стивен Харрис
источник
Хм, это не работает для меня - я думаю, что функция должна быть подключена к одному из фильтров, но не знаю, какой.
3
Работает для меня ... Вы уверены, что передаете (действительный) идентификатор сообщения?
Стивен Харрис
Но я хочу отобразить это метаполе на экране редактирования для каждого сообщения (не только для одного), и автор сообщения может отличаться, поэтому $ post_id должен загружаться динамически в соответствии с экраном редактирования.
3
Установить $post_idдинамически. При использовании внутри метабокса ваш обратный вызов метабокса будет передан $postобъекту. Таким образом, вы можете использовать $post->ID(Возможно, вы можете просто использовать $post->post_authorдля этой мета.
Стивен Харрис
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;
}

С помощью этой функции я смог отобразить сообщение автора сообщения на экране редактирования сообщения. Все еще не знаю, как заставить это работать с пользовательским метаполем, но я думаю, что сейчас я ближе.

th3rion
источник
Это тоже твой вопрос. Вы можете отредактировать его, чтобы уточнить.
funusinglost