¿Por qué get_user_meta() no incluye el email del usuario?

3 abr 2013, 16:41:11
Vistas: 42.6K
Votos: 11

Me pregunto simplemente por qué <?php var_dump(get_user_meta(4)); ?> no contiene la dirección de email del usuario. En su lugar, tengo que usar

get_userdata(4)->user_email; para consultar el email del usuario.

¿Por qué es así o me he perdido algo? get_user_meta() parece proporcionar todos los demás aspectos e información de un usuario, sin embargo, no incluye la dirección de email.

Matt

0
Todas las respuestas a la pregunta 3
1
14

Solo quería hacerte saber que tienes get_user_meta y get_userdata. La dirección de correo electrónico se puede encontrar usando la función get_userdata.

Para el usuario actual, se puede aplicar este código:

<?php

  $user_id = get_current_user_id(); 
  $user_info = get_userdata($user_id);
  $mailadresje = $user_info->user_email;
  echo $mailadresje;

?>

Ten en cuenta que esto es aplicable al usuario actual. Si necesitas obtener el user_id de, por ejemplo, un pedido, necesitas el siguiente código (que utilicé para mostrar el correo del usuario en la factura de WooCommerce):

<?php

  $user_id = $wpo_wcpdf->export->order->user_id;
  $user_info = get_userdata($user_id);
  $mailadresje = $user_info->user_email;
  echo $mailadresje;

?>

¡Feliz programación!

24 nov 2015 12:09:07
Comentarios

Gracias, compatriota :)

Richard Lindhout Richard Lindhout
4 nov 2020 00:05:59
2
11

get_user_meta recupera un solo campo meta o todos los campos de los datos user_meta para el usuario dado.

Esto significa que todos los valores almacenados en la tabla user_meta pueden obtenerse usando get_user_meta. El correo electrónico no se almacena como metadato, por lo que no puedes obtener el correo electrónico usando get_user_meta.

El correo electrónico se almacena junto con el nombre de usuario y la contraseña en la tabla user como datos del usuario.

3 abr 2013 16:54:19
Comentarios

Eh, entonces ¿cómo obtenemos el correo electrónico del usuario para almacenarlo como variable?

Osu Osu
17 sept 2013 10:54:13
3

Si deseas obtener solo el correo electrónico de un usuario a partir de su ID sin cargar todo el objeto de usuario, aquí tienes una función rápida que utiliza la variable global $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 mar 2023 16:19:03
Comentarios

¿Es eso realmente más eficiente? Supondría que la otra forma sigue siendo solo una lectura de la base de datos, y podría estar también en la caché en memoria de la solicitud.

Rup Rup
14 mar 2023 18:06:47

Sí, es más eficiente. get_userdata() activará update_meta_cache() que consulta los metadatos del usuario dentro de la tabla wp_usermeta.

Jiminy Cricket Jiminy Cricket
15 mar 2023 19:28:59

OK, tiene sentido. WP_User::get_data_by( 'id', $user_id ) entonces, que hace el caché pero no los meta, etc.

Rup Rup
15 mar 2023 21:40:44