Kopieren Sie die Benutzerrolle auf mehrere Standorte, damit der Benutzer auf Unterwebsites mit derselben Rolle zugreifen kann

Ich habe ein Multi-Site-Netzwerk mit rund 250 Standorten eingerichtet. Ich möchte in der Lage sein, Benutzer mit ihrer zugewiesenen Rolle von der Hauptwebsite im Netzwerk an Unterwebsites zu kopieren. So habe ich das versucht:

functionen.php

add_action('wp','add_current_user_to_site',10); function add_current_user_to_site() { if(!is_user_logged_in()) { return false; } $current_user = wp_get_current_user(); $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog(1); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } 

Dies wurde getestet und funktioniert, wenn ein Benutzer die Unterwebsite besucht THEN fortfährt, um sich anzumelden. Wenn sie versuchen, sich direkt anzumelden, erhalten sie einen Fehler.

Ist dies der beste Weg, um einen Benutzer zu kopieren und ihn zu den Unterwebsites hinzuzufügen? Gibt es eine Möglichkeit, dies zuzulassen, wenn man das Login direkt besucht, anstatt zuerst die Seite zu besuchen?

Solutions Collecting From Web of "Kopieren Sie die Benutzerrolle auf mehrere Standorte, damit der Benutzer auf Unterwebsites mit derselben Rolle zugreifen kann"

Sie können die folgende function verwenden, um alle Benutzer auf die gesamte Unterwebsite zu kopieren. Es werden zuerst alle Benutzer-IDs und Unterwebs-IDs abgerufen, dann werden alle Websites und Benutzer wiederholt, um alle Benutzer jeder Unterwebsite zuzuweisen. Hier ist der aktualisierte Code

 add_action('wp','the_dramatist_add_current_user_to_site'); function the_dramatist_add_current_user_to_site() { global $wpdb; $all_users = $wpdb->get_col( 'SELECT ID FROM $wpdb->users' ); $subsites = get_sites(); foreach( $subsites as $subsite ) { $subsite_id = get_object_vars($subsite)['blog_id']; foreach ( $all_users as $current_user) { $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog($subsite_id); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } } } 

Hoffe, dass das Ding hilft.

Mit der anderen Antwort scheint es, gibt es zwei Möglichkeiten, Benutzer mit ihren zugewiesenen Rollen von der Hauptwebsite zu Unterwebsites in einem WordPress Multisite-Netzwerk zu kopieren.

Es kann so eingerichtet werden, dass der aktuelle Benutzer oder alle Benutzer von einer Website (ich wählte die Hauptnetzwerkwebsite, blog_id=1 ) zur blog_id=1 wenn sie die Seite besuchen.

Hier ist, wie Sie beides tun, wählen Sie eine und fügen Sie functions.php :

Fügen Sie nur den Benutzer zu jeder Unterwebsite hinzu

 function add_current_user_to_site() { if(!is_user_logged_in()) { return false; } $current_user = wp_get_current_user(); $blog_id = get_current_blog_id(); $user_id = ($current_user->ID); switch_to_blog(1); $get_role = ($current_user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } add_action('wp','add_current_user_to_site'); 

Fügen Sie jeder Unterwebsite alle Benutzer hinzu

 function add_all_users_to_site() { if(!is_user_logged_in()) { return false; } $users = get_users('blog_id=1'); $sites = get_sites(); foreach ($sites as $site) { foreach ($users as $user) { $blog_id = get_current_blog_id(); $user_id = ($user->ID); switch_to_blog($site->id); $get_role = ($user->caps); $add_role = key($get_role); restore_current_blog(); if (!is_user_member_of_blog( $user_id, $blog_id ) ) { add_user_to_blog( $blog_id, $user_id, $add_role ); } } } } add_action('wp','add_all_users_to_site');