Zunächst müssen Sie der Rolle Doctorund die folgenden Funktionen hinzufügen Receptionist:
list_users
edit_users
create_users
delete_users
Jetzt können wir steuern, welche Benutzer sie erstellen / bearbeiten / löschen können. Beginnen wir mit einer "Hilfefunktion", die zurückgibt, welche Rollen ein Benutzer bearbeiten darf:
/**
* Helper function get getting roles that the user is allowed to create/edit/delete.
*
* @param WP_User $user
* @return array
*/function wpse_188863_get_allowed_roles( $user ){
$allowed = array();if( in_array('administrator', $user->roles )){// Admin can edit all roles
$allowed = array_keys( $GLOBALS['wp_roles']->roles );} elseif ( in_array('Doctor', $user->roles )){
$allowed[]='Receptionist';
$allowed[]='Guest';} elseif ( in_array('Receptionist', $user->roles )){
$allowed[]='Guest';}return $allowed;}
Und um festzulegen, welche Rollen sie einem Benutzer zuweisen können:
/**
* Remove roles that are not allowed for the current user role.
*/function wpse_188863_editable_roles( $roles ){if( $user = wp_get_current_user()){
$allowed = wpse_188863_get_allowed_roles( $user );foreach( $roles as $role => $caps ){if(! in_array( $role, $allowed ))
unset( $roles[ $role ]);}}return $roles;}
add_filter('editable_roles','wpse_188863_editable_roles');
Und schließlich begrenzen Sie, welche Benutzer sie basierend auf ihrer Rolle bearbeiten / löschen können:
/**
* Prevent users deleting/editing users with a role outside their allowance.
*/function wpse_188863_map_meta_cap( $caps, $cap, $user_ID, $args ){if(( $cap ==='edit_user'|| $cap ==='delete_user')&& $args ){
$the_user = get_userdata( $user_ID );// The user performing the task
$user = get_userdata( $args[0]);// The user being edited/deletedif( $the_user && $user && $the_user->ID != $user->ID /* User can always edit self */){
$allowed = wpse_188863_get_allowed_roles( $the_user );if( array_diff( $user->roles, $allowed )){// Target user has roles outside of our limits
$caps[]='not_allowed';}}}return $caps;}
add_filter('map_meta_cap','wpse_188863_map_meta_cap',10,4);
Perfekt, vielen Dank. Nachdem ich Funktionen und Ihren Code hinzugefügt habe, funktioniert es wie erwartet. Aber Doctors, Receptionistund Guestsind nicht in der Lage zu sein eigenes Profil zu bearbeiten. Ich möchte, dass sie ihr eigenes Profil bearbeiten. Wie kann ich das machen?
Riffaz Starr
Hallo TheDeadMedic. Bist du da? Ich habe deine Antwort positiv bewertet. Könnten Sie bitte meinen obigen Kommentar lesen?
Riffaz Starr
Überprüfen Sie meine Revision.
TheDeadMedic
@TheDeadMedic Ihr Code hat mir sehr geholfen. Ich habe nur ein Problem. Ich benutze dies auf einer Multisite. Und während dieser Code mein Problem löste, schuf er einen anderen. Wenn ich als Superadministrator angemeldet bin, kann ich auf den Netzwerkseiten des Superadministrators überhaupt keine Rollen auswählen. Wie löse ich das?
Jockebq
1
Dies ist eine brillante Antwort auf die Frage. Ich fand, dass Wordpress 'eigene Dokumentation in diesem Bereich gänzlich fehlte, sogar voller grammatikalischer Fehler. Dies ist eine wirklich effiziente Lösung für das Problem.
Benji
0
Die obige Antwort hat großartig funktioniert. Die Rollen müssen jedoch für Kleinbuchstaben sein
Die Groß- und Kleinschreibung der Rollen sollte in den meisten Fällen wahrscheinlich sein. Im obigen Beispiel werden sowohl der Slug als auch der Name in Groß- und Kleinschreibung angegeben. Dies ist technisch korrekt, wird jedoch nicht empfohlen.
Doctors
,Receptionist
undGuest
sind nicht in der Lage zu sein eigenes Profil zu bearbeiten. Ich möchte, dass sie ihr eigenes Profil bearbeiten. Wie kann ich das machen?Die obige Antwort hat großartig funktioniert. Die Rollen müssen jedoch für Kleinbuchstaben sein
Zum Beispiel:
quelle