Let Editors Manage Users (Except Administrators)
Allows editors to add, edit and remove users, while making sure they can never create administrators or touch administrator accounts.
Opens WPIDE on
Code
$wpide_user_caps = array( 'list_users', 'create_users', 'edit_users', 'delete_users', 'remove_users', 'promote_users' );
add_filter( 'user_has_cap', function ( $allcaps, $caps, $args, $user ) use ( $wpide_user_caps ) {
if ( in_array( 'editor', (array) $user->roles, true ) ) {
foreach ( $wpide_user_caps as $cap ) {
$allcaps[ $cap ] = true;
}
}
return $allcaps;
}, 10, 4 );
// Editors cannot hand out the administrator role.
add_filter( 'editable_roles', function ( $roles ) {
if ( ! current_user_can( 'manage_options' ) ) {
unset( $roles['administrator'] );
}
return $roles;
} );
// Editors cannot edit, delete or demote administrators.
add_filter( 'map_meta_cap', function ( $caps, $cap, $user_id, $args ) {
if ( ! in_array( $cap, array( 'edit_user', 'delete_user', 'remove_user', 'promote_user' ), true ) || empty( $args[0] ) ) {
return $caps;
}
if ( (int) $args[0] !== (int) $user_id && user_can( (int) $args[0], 'manage_options' ) && ! user_can( $user_id, 'manage_options' ) ) {
$caps[] = 'do_not_allow';
}
return $caps;
}, 10, 4 );
Notes
Capabilities are granted in memory only, so deactivating the snippet removes them again.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.