# 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.

- Type: PHP
- Runs: Run everywhere
- Category: [Users](https://wpide.com/library/category/users/)
- Tags: users, roles, capabilities
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/editors-manage-users/

## Code

```php
$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 use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Let Editors Manage Users (Except Administrators)" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
