WordPress si existe usermeta meta_key haz esto

3 minutos de lectura

avatar de usuario
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?

  • $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

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 falseusar metadata_exists:

if ( metadata_exists( 'user', $user_id, $meta_key ) ) {

   ...

}

avatar de usuario
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


¿Ha sido útil esta solución?