web-dev-qa-db-ja.com

マルチサイトで特定のブログのユーザーロールを取得する方法

マルチサイトネットワーク上の特定のサイトに対するユーザーの役割をどのように取得できますか?

ユーザーが親サイトの加入者であり、自分のサブドメインの管理者であるとしましょう。親サイトまたは特定のブログIDでのみロールを返す方法はありますか?

例:get_wpmu_user_role($user_id, $blog_id);

2
Denis Lam

WP_User のいずれかを使用できます。

$wp_user_obj = new WP_User(
    // $user_id
    get_current_user_id(),
    // $name | login, ignored if $user_id is set
    '',
    // $blog_id
    get_current_blog_id()
);

または get_users()

$get_users_obj = get_users(
    array(
        'blog_id' => get_current_blog_id(),
        'search'  => get_current_user_id()
    )
);

両方ともblog_id認識されるので、あなたがそれを提供するならば。

前者はWP_Userオブジェクトを返します、ロールはこのようにアクセス可能です:

// array of roles
$wp_user_obj->roles
// access the first or only 
$wp_user_obj->roles[0]

後者はWP_Userオブジェクトの配列、実際には1つのオブジェクトのみを返します。user_idの検索では一意のオブジェクトを1つだけ返すことができるため、ロールには次のようにアクセスできます。

// array of roles
$get_users_obj[0]->roles
// access the first or only 
$get_users_obj[0]->roles[0]


別の考えは、私自身では決してしませんでしたが、あなたが何らかの種類の共有ログインを持っていて、現在のユーザーの情報が欲しいのなら、これもうまくいくでしょう:

switch_to_blog( $blog_id );
$current_user_at_different_blog = wp_get_current_user();
restore_current_blog();

wp_get_current_user()WP_Userオブジェクトを返すので、以下のように情報にアクセスできます。

// array of roles
$current_user_at_different_blog->roles
// access the first or only 
$current_user_at_different_blog->roles[0]


最後になりましたが重要なことに、 current_user_can_for_blog() があります。

current_user_can_for_blog( $blog_id, $capability );

コーデックスページには、次のように記載されています。

現在のユーザーが特定のブログの機能または役割を持っているかどうか。

しかしIstrongのように疑わしい current_user_can() it ロールに使用するべきではありません しかし能力チェックも強力で便利です。

6
Nicolai