barrendero
Estoy seguro de que esto es fácil para todos ustedes, pero todo esto es nuevo para mí.
Básicamente, quiero verificar que si el usuario que inició sesión tiene ciertos metadatos adjuntos a su perfil, ciertas cosas se muestran en el sitio.
Los metadatos del usuario se almacenan en la tabla wp_usermeta que contiene umeta_id, user_id, meta_key y meta_value. En esencia, necesito ver si user_id tiene una meta_key llamada ‘prueba’.
Conozco la función get_user_meta() pero no puedo hacer que esto funcione como quiero…
global $current_user;
get_currentuserinfo(); // wordpress global variable to fetch logged in user info
$userID = $current_user->ID; // logged in user's ID
$havemeta = get_user_meta($userID, 'test', true); // stores the value of logged in user's meta data for 'test'.
if (isset($havemeta)){
echo $havemeta;
} else {
echo "No";
}
La teoría de este código es que compruebo si la ‘prueba’ de meta_key contiene un meta_valor, si es cierto, haz X o haz Y. La molestia es que no todos los usuarios tienen una meta_key de ‘prueba’. Por lo tanto, si el usuario que inició sesión no tiene esta clave meta, el código no funciona. Además, no quiero verificar el valor real de la clave meta (puede ser NULL por lo que a mí respecta), solo quiero saber si existe tal clave para el usuario que inició sesión.
¿Algunas ideas?
WordPress >=3.3
Hay una advertencia con la solución propuesta: una meta_key cuyo valor es false
dará falsos negativos.
Para preguntarle a WordPress si se establece una meta_key, incluso si el valor es false
usar metadata_exists
:
if ( metadata_exists( 'user', $user_id, $meta_key ) ) {
...
}
moffepoffe
if ($havemeta) { echo 'your stuff'; }
-
si $havemeta es un valor falso (p. ej., 0 o “0”), se evaluará erróneamente como falso. Sería mejor hacer una comparación estricta con una cadena vacía:
$havemeta = get_user_meta( $userID, $field, true ); if ($havemeta === '') { /* do stuff */ }
o$havemeta = get_user_meta( $userID, $field, false ); if ($havemeta === []) { /*do stuff */ }
–Tom Dudman
28 de marzo de 2019 a las 16:04
(PROBADO) Si pones true
como último argumento, según la documentación, devolverá el valor del campo de metadatos. Lo que significa que tienes que poner false
como último argumento.
$havemeta = get_user_meta($userID, 'test', false);
Entonces, como se dijo en la otra respuesta, puedes verificarlo.
if ($havemeta)
echo $havemeta;
} else {
echo "No";
}
-
El tercer argumento especifica si devolver un único valor meta o una matriz. Y es falso de forma predeterminada: “$single (booleano) (opcional) Si es verdadero, devuelve el valor del campo de metadatos, si es falso, devuelve una matriz. Este parámetro no tiene efecto si la tecla $ se deja en blanco. Predeterminado: falso” – codex.wordpress.org/Function_Reference/get_user_meta. Si el valor meta no existe, devolverá una cadena vacía o una matriz vacía según este argumento.
– Claytronicon
14/03/2018 a las 20:24
$havemeta siempre se establece justo encima de su declaración if, por lo que la declaración if siempre tendrá el mismo resultado, sin importar el valor. ¿No deberías usar algo como “if (!empty($havemeta)){“?
– jake
2 de febrero de 2012 a las 8:16