Cómo obtener el rol de un usuario
Necesito obtener el rol asociado a un usuario -- no el "usuario actualmente conectado".
Estoy usando BuddyPress (aunque no debería afectar a la naturaleza de esta pregunta) y estoy en el bucle bp_members()
.
¿Cómo puedo recuperar el rol del usuario sobre el que estoy informando en el bucle en cualquier momento dado?
Gracias.

Utiliza el ID de usuario y WP_User
:
$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );
Actualización
/**
* Obtener roles de usuario por ID de usuario.
*
* @param int $id
* @return array
*/
function wpse_58916_user_roles_by_id( $id )
{
$user = new WP_User( $id );
if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
return array ();
$wp_roles = new WP_Roles;
$names = $wp_roles->get_names();
$out = array ();
foreach ( $user->roles as $role )
{
if ( isset ( $names[ $role ] ) )
$out[ $role ] = $names[ $role ];
}
return $out;
}
Ejemplo de uso:
print '<pre>'
. htmlspecialchars(
print_r( wpse_58916_user_roles_by_id(1), TRUE )
)
. '</pre>';
Array
(
[administrator] => Administrator
)

Gracias @toscho -- no pareció darme lo que esperaba. Obtuve un editor, un valor en blanco/nulo y bbp_participant. Esperaba ver Admin, Editor, Author o Subscriber ya que esos son los únicos roles que estamos usando.

Gracias @toscho ... eso es mucho código para obtener un valor de datos que pensé que estaría más fácilmente disponible.

Si bp_members
devuelve un array de objetos WP_User
, cada uno debería tener la propiedad roles
que contiene un array de los roles del usuario.
De lo contrario, puedes usar get_user_meta
con la clave wp_capabilities
, que devolverá un array de pares rol => capacidad
:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

$roles termina siendo un array. Estoy buscando obtener el rol del $user->ID
. Solo un rol ya que ningún usuario en nuestro sistema tiene asignado más de un rol.

Ok, gracias @ChristopherDavis ... $roles[0] devuelve "0" para todos los usuarios en la lista

Según entiendo, probablemente ha cambiado con los años, ahora no es 'wp_capabilities'
. Revisé los archivos principales de WP para ver cómo lo hacen ahora y encontré una nueva solución para esto. Este es el código que uso actualmente:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap
viene como un array asociativo, por ejemplo:
{
"administrator": true
}
o
{
"subscriber": true
}
Entonces, en tu caso probablemente deberías obtener las claves del array:
$caps_array = array_keys( $cap );
y luego obtener todo de ahí. Yo necesitaba verificar si el usuario tenía el rol de administrador, así que comprobé:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
Tenía un ID de usuario, no el objeto completo WP_User
, y no quería usar ninguna solución que creara el objeto user
. Según verifiqué, get_user_meta
va directamente a la base de datos para buscar este parámetro exacto, por lo que esta debería ser la ruta más rápida y eficiente en términos de recursos.
