Title: WP_Roles::remove_cap
Published: April 25, 2014
Last modified: February 24, 2026

---

# WP_Roles::remove_cap( string $role, string $cap )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#parameters)
 * [More Information](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#more-information)
 * [Source](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#wp--skip-link--target)

Removes a capability from role.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#parameters)󠁿

 `$role`stringrequired

Role name.

`$cap`stringrequired

Capability name.

## 󠀁[More Information](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#more-information)󠁿

Changing the capabilities of a role is persistent, meaning the removed capability
will stay in effect until explicitly granted.

This setting is saved to the database (in table wp_options, field 'wp_user_roles'),
so you should run this only once, on theme/plugin activation and/or deactivation.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#source)󠁿

    ```php
    public function remove_cap( $role, $cap ) {
    	if ( ! isset( $this->roles[ $role ] ) ) {
    		return;
    	}

    	unset( $this->roles[ $role ]['capabilities'][ $cap ] );
    	if ( $this->use_db ) {
    		update_option( $this->role_key, $this->roles );
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-roles.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-roles.php#L251)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-roles.php#L251-L260)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#related)󠁿

| Uses | Description | 
| [update_option()](https://developer.wordpress.org/reference/functions/update_option/)`wp-includes/option.php` |

Updates the value of an option that was already added.

  |

| Used by | Description | 
| [WP_Role::remove_cap()](https://developer.wordpress.org/reference/classes/wp_role/remove_cap/)`wp-includes/class-wp-role.php` |

Removes a capability from a role.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#changelog)󠁿

| Version | Description | 
| [2.0.0](https://developer.wordpress.org/reference/since/2.0.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#user-contributed-notes)󠁿

 1.  [Skip to note 2 content](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/?output_format=md#comment-content-4015)
 2.   [Akira Tachibana](https://profiles.wordpress.org/atachibana/)  [  6 years ago  ](https://developer.wordpress.org/reference/classes/wp_roles/remove_cap/#comment-4015)
 3. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_roles%2Fremove_cap%2F%23comment-4015)
    Vote results for this note: 0[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_roles%2Fremove_cap%2F%23comment-4015)
 4. From Codex
 5.     ```php
        /**
         * Don't let editors read private posts.
         *
         * An alternative using WP_Roles instead of WP_Role.
         *
         * You should call the function when your plugin is activated.
         *
         * @uses $wp_roles
         * @uses WP_Roles::remove_cap()
         */
        function remove_editor_read_private_posts(){
    
        	// $wp_roles is an instance of WP_Roles.
        	global $wp_roles;
        	$wp_roles->remove_cap( 'editor', 'read_private_posts' );
        }
        ```
    
 6.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_roles%2Fremove_cap%2F%3Freplytocom%3D4015%23feedback-editor-4015)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_roles%2Fremove_cap%2F)
before being able to contribute a note or feedback.