it-swarm.com.de

Wie erhält man eine Benutzerrolle eines bestimmten Blogs in Multisite?

Wie kann die Rolle eines Benutzers für eine bestimmte Site in einem Multisite-Netzwerk ermittelt werden?

Angenommen, der Benutzer ist ein Abonnent auf der übergeordneten Site und Administrator seiner eigenen Subdomain. Gibt es eine Möglichkeit, die Rolle nur auf der übergeordneten Website oder anhand einer bestimmten Blog-ID zurückzugeben?

Beispiel: get_wpmu_user_role($user_id, $blog_id);

2
Denis Lam

Sie können entweder WP_User verwenden:

$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()
);

Oder get_users() :

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

Da sie beide blog_id scharfsinnig sind, wenn Sie es zur Verfügung stellen.

Ersteres gibt ein WP_User-Objekt zurück, auf die Rollen kann folgendermaßen zugegriffen werden:

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

Letzteres gibt ein Array von WP_User-Objekten zurück, eigentlich nur ein Objekt, da die Suche nach einem user_id nur ein eindeutiges Objekt zurückgeben kann. Auf die Rollen kann folgendermaßen zugegriffen werden:

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


Eine andere Idee, die ich nie selbst gemacht habe, aber wenn Sie eine Art gemeinsames Login haben und die Informationen des aktuellen Benutzers möchten, könnte dies auch funktionieren:

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

wp_get_current_user() gibt ein WP_User-Objekt zurück, sodass auf die Informationen wie folgt zugegriffen werden kann:

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


Last but not least gibt es current_user_can_for_blog() , die wie folgt verwendet werden können:

current_user_can_for_blog( $blog_id, $capability );

Auf der Codex-Seite heißt es:

Gibt an, ob der aktuelle Benutzer über eine Funktion oder eine Rolle für ein bestimmtes Blog verfügt.

Aber ich stark verdächtige wie current_user_can() es sollte nicht für Rollen verwendet werden , aber Fähigkeitsüberprüfungen sind macht- und auch nützlich.

6
Nicolai