get_user_meta() не включает email пользователя?

3 апр. 2013 г., 16:41:11
Просмотры: 42.6K
Голосов: 11

Меня интересует, почему <?php var_dump(get_user_meta(4)); ?> не содержит email адрес пользователя. Вместо этого мне приходится использовать

get_userdata(4)->user_email; чтобы получить email пользователя.

Почему так происходит или я что-то упустил? get_user_meta() предоставляет все остальные аспекты и информацию о пользователе, но почему-то не включает email-адрес.

Матт

0
Все ответы на вопрос 3
1
14

Хочу обратить ваше внимание, что в 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;

?>

Удачного программирования!

24 нояб. 2015 г. 12:09:07
Комментарии

Спасибо, земляк :)

Richard Lindhout Richard Lindhout
4 нояб. 2020 г. 00:05:59
2
11

get_user_meta извлекает одно мета-поле или все поля данных user_meta для указанного пользователя.

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

Email хранится вместе с именем пользователя и паролем в таблице user как данные пользователя.

3 апр. 2013 г. 16:54:19
Комментарии

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

Osu Osu
17 сент. 2013 г. 10:54:13
3

Если вам нужно получить только 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));
}
14 мар. 2023 г. 16:19:03
Комментарии

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

Rup Rup
14 мар. 2023 г. 18:06:47

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

Jiminy Cricket Jiminy Cricket
15 мар. 2023 г. 19:28:59

Ладно, согласен. Тогда WP_User::get_data_by( 'id', $user_id ), который использует кеш, но не затрагивает метаданные и прочее.

Rup Rup
15 мар. 2023 г. 21:40:44