get_user_meta() не включает email пользователя?
Меня интересует, почему <?php var_dump(get_user_meta(4)); ?>
не содержит email адрес пользователя. Вместо этого мне приходится использовать
get_userdata(4)->user_email;
чтобы получить email пользователя.
Почему так происходит или я что-то упустил? get_user_meta()
предоставляет все остальные аспекты и информацию о пользователе, но почему-то не включает email-адрес.
Матт

Хочу обратить ваше внимание, что в WordPress есть функции get_user_meta
и get_userdata
. Email пользователя можно получить с помощью функции get_userdata
.
Для текущего пользователя можно использовать следующий код:
<?php
$user_id = get_current_user_id();
$user_info = get_userdata($user_id);
$mailadresje = $user_info->user_email;
echo $mailadresje;
?>
Обратите внимание, что этот код работает для текущего пользователя. Если вам нужно получить user_id
, например, из заказа (я использовал этот код для отображения email пользователя в счете WooCommerce), используйте следующий код:
<?php
$user_id = $wpo_wcpdf->export->order->user_id;
$user_info = get_userdata($user_id);
$mailadresje = $user_info->user_email;
echo $mailadresje;
?>
Удачного программирования!

get_user_meta
извлекает одно мета-поле или все поля данных user_meta
для указанного пользователя.
Это означает, что все значения, хранящиеся в таблице user_meta
, могут быть получены с помощью get_user_meta
. Email не хранится как метаданные, поэтому вы не можете получить email с помощью get_user_meta
.
Email хранится вместе с именем пользователя и паролем в таблице user
как данные пользователя.

Эм, как нам получить email пользователя, чтобы сохранить его в переменную?

@Osu посмотри http://codex.wordpress.org/Function_Reference/get_currentuserinfo , http://codex.wordpress.org/Function_Reference/get_userdata

Если вам нужно получить только email пользователя по его ID без загрузки всего объекта пользователя, вот быстрая функция с использованием глобальной переменной $wpdb:
function get_user_email($user_id){
global $wpdb;
return $wpdb->get_var($wpdb->prepare("SELECT user_email FROM wp_users WHERE id=%d", $user_id));
}

Это действительно эффективнее? Я бы предположил, что другой способ все равно требует всего одного чтения из базы данных и может быть к тому же в оперативном кеше запроса.

Да, это эффективнее. get_userdata() вызовет update_meta_cache(), который выполняет запрос метаданных пользователя в таблице wp_usermeta.
