получить ID автора записи вне цикла
Мне нужно разместить в панели редактирования записи метабокс с email автора записи (или другими мета-полями пользователя). Чтобы администратор мог редактировать это при просмотре записи.
$meta_id = get_the_author_meta( 'user_email', $user_id );
$meta_box = array(
'id' => 'my-meta-box',
'title' => 'ДАННЫЕ КОМПАНИИ',
'page' => 'post',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => 'E-mail ящик',
'id' => 'mail',
'type' => 'text',
'std' => $meta_id
)
)
);
Этот код работает, когда $user_id является целым числом (когда я вручную указываю там, например, 4), но я хочу динамически получить ID текущего автора ($user_id
).
get_the_author_meta('user_mail')
должен работать без указания $user_id
(так говорится в документации :)), но код находится в functions.php
и вне цикла, поэтому он не работает. Я только начинаю работать с WordPress и PHP, поэтому не знаю, что делать дальше.
Также пробовал это:
global $post;
$user_id=$post->post_author;

Самый простой способ — использовать функцию get_post_field()
:
$post_author_id = get_post_field( 'post_author', $post_id );
Для получения дополнительной информации по этому вопросу ознакомьтесь с этим ответом на StackOverflow.

Вы можете использовать следующее:
/**
* Получает автора указанной записи. Также может использоваться внутри цикла
* для получения ID автора текущей записи, без передачи ID записи.
* Вне цикла необходимо передать ID записи.
*
* @param int $post_id ID записи
* @return int ID автора записи
*/
function wpse119881_get_author( $post_id = 0 ){
$post = get_post( $post_id );
return $post->post_author;
}

Хм, у меня не работает - думаю, функция должна быть подключена к одному из фильтров, но не знаю к какому.

У меня работает... ты уверен, что передаешь (валидный) ID поста?

Но я хочу отображать это мета-поле на экране редактирования для каждого поста (не только для одного), и автор поста может быть разным, поэтому $post_id должен загружаться динамически в соответствии с экраном редактирования.

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;
}
С помощью этой функции мне удалось вывести email автора записи на экране редактирования поста. Пока не знаю, как заставить это работать с пользовательскими метаполями, но думаю, что стал ближе к решению.
