web-dev-qa-db-ja.com

ユーザーの役割を取得する方法

「現在ログインしているユーザー」ではなく、ユーザーに関連付けられたロールを取得する必要があります。

私はBuddypressを使用しています(この質問の本質には関係ありません)。私はbp_members()ループに入っています。

ループ内で自分が報告しているユーザーの役割をいつでも取得できますか?

ありがとう。

13
frank13

ユーザーIDと WP_User を使用します。

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

更新

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

使用例

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

Array
(
    [administrator] => Administrator
)
16
fuxia

bp_membersWP_Userオブジェクトの配列を返す場合、それぞれがユーザーロールの配列を含むプロパティrolesを持つ必要があります。

それ以外の場合は、キーget_user_metawp_capabilitiesを使用できます。これにより、role => capabilityペアの配列が返されます。

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
7
chrisguitarguy

私が理解しているように、それはおそらく何年にもわたって変わった、今では'wp_capabilities'ではない。私はコアのWPファイルを見て、どうやってそれを行っているのか、そしてこれに対する新しい解決策を見つけました。これが私が今使っているコードです:

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

$capは連想配列になります。次に例を示します。

{
    "administrator": true
}

または

{
    "subscriber": true
}

だからあなたの場合は、おそらく配列のキーを取得する必要があります。

$caps_array = array_keys( $cap );

それからすべてのものを入手してください。ユーザーに管理者の役割があるかどうかを確認する必要があったので、次の点を確認しました。

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

WP_Userオブジェクト全体ではなく、ユーザーIDを持っていたので、userオブジェクトを作成するような解決策を使用したくありませんでした。私がチェックしたように、get_user_metaはこの正確なパラメータをチェックするために直接dbに行きます、それでこれは最速でリソースに関する方法であるべきです。

0
Olga Farber