Cómo obtener el rol del usuario

13

Necesito obtener la función asociada con un usuario, no el "usuario que ha iniciado sesión actualmente".

Estoy usando Buddypress (no debería ser importante para la naturaleza de esta pregunta) y estoy en el bucle bp_members() .

¿Cómo puedo recuperar la función del usuario sobre el que estoy informando en el bucle en un momento dado?

Gracias.

    
pregunta frank13 18.07.2012 - 21:39

3 respuestas

16

Utilice el ID de usuario y WP_User :

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

Actualizar

/**
 * Get user roles by user ID.
 *
 * @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
)
    
respondido por el fuxia 18.07.2012 - 21:57
6

Si bp_members devuelve una matriz de objetos WP_User , cada uno debe tener una propiedad roles que contenga una matriz de los roles de los usuarios.

De lo contrario, puede usar get_user_meta para la clave wp_capabilities , que devolverá una matriz de role => capability pares:

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
    
respondido por el chrisguitarguy 18.07.2012 - 21:58
0

Según tengo entendido, es probable que haya cambiado con los años, ahora no es 'wp_capabilities' . Miré los archivos principales de WP, cómo lo hacen ahora, y encontré una nueva solución para esto. Aquí está el código que utilizo ahora:

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap luego viene como una matriz asociativa, por ejemplo:

{
    "administrator": true
}

o

{
    "subscriber": true
}

Entonces, en su caso, probablemente debería obtener las claves de la matriz:

$caps_array = array_keys( $cap );

y luego obtener todo de ella. Necesitaba ver si el usuario tiene el rol de administrador, así que verifiqué:

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

Tenía un ID de usuario, no el objeto WP_User completo, y no quería usar ninguna solución que creara el objeto user . Cuando lo verifiqué, get_user_meta va directamente a la base de datos para verificar este parámetro exacto, por lo que esta debería ser la ruta más rápida y con recursos.

    
respondido por el Olga Farber 12.11.2016 - 15:44

Lea otras preguntas en las etiquetas