Como obter papel do usuário

13

Eu preciso da função associada a um usuário - não do "usuário conectado no momento".

Estou usando o Buddypress (isso não importa para a natureza dessa pergunta) e estou no loop bp_members() .

Como posso recuperar a função do usuário que estou relatando no loop a qualquer momento?

Obrigado.

    
por frank13 18.07.2012 / 21:39

3 respostas

16

Use o ID do usuário e WP_User :

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

Atualizar

/**
 * 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;
}

Exemplo de uso:

print '<pre>' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . '</pre>';

Array
(
    [administrator] => Administrator
)
    
por fuxia 18.07.2012 / 21:57
6

Se bp_members retornar uma matriz de WP_User objetos, cada um deve ter a propriedade roles que contém uma matriz das funções de usuários.

Caso contrário, você pode usar get_user_meta para a chave wp_capabilities , que retornará uma matriz de role => capability pairs:

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

Pelo que entendi, provavelmente mudou ao longo dos anos, agora não é 'wp_capabilities' . Eu olhei para os arquivos principais do WP, como eles fazem agora, e encontrei uma nova solução para isso. Aqui está o código que eu uso agora:

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

$cap então vem como um array associativo, por exemplo:

{
    "administrator": true
}

ou

{
    "subscriber": true
}

Então, no seu caso, você deve provavelmente pegar as chaves da matriz:

$caps_array = array_keys( $cap );

e depois tire tudo dela. Eu precisava ver se o usuário tem a função de administrador, então verifiquei:

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

Eu tinha um ID de usuário, não o objeto WP_User inteiro, e não queria usar nenhuma solução que criasse o objeto user . Conforme eu verifiquei, get_user_meta vai direto para o banco de dados para verificar esse parâmetro exato, portanto, essa deve ser a rota mais rápida e baseada em recursos.

    
por Olga Farber 12.11.2016 / 15:44

Tags