получить ID автора записи вне цикла

24 окт. 2013 г., 00:52:37
Просмотры: 66.5K
Голосов: 21

Мне нужно разместить в панели редактирования записи метабокс с 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;
0
Все ответы на вопрос 3
0
40

Самый простой способ — использовать функцию get_post_field():

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

Для получения дополнительной информации по этому вопросу ознакомьтесь с этим ответом на StackOverflow.

12 июн. 2015 г. 14:35:50
4

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

/**
 * Получает автора указанной записи. Также может использоваться внутри цикла
 * для получения 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;
}
24 окт. 2013 г. 01:21:09
Комментарии

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

th3rion th3rion
24 окт. 2013 г. 09:22:56

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

Stephen Harris Stephen Harris
24 окт. 2013 г. 16:04:43

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

th3rion th3rion
24 окт. 2013 г. 16:17:43

Устанавливайте $post_id динамически. Если используется внутри метабокса, вашему колбэку метабокса будет передан объект $post. Таким образом, вы можете использовать $post->ID (вероятно, для этой меты вы можете просто использовать $post->post_author).

Stephen Harris Stephen Harris
24 окт. 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;
}

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

24 окт. 2013 г. 09:03:03
Комментарии

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

Andy Jacobs Andy Jacobs
17 июн. 2014 г. 04:08:52