Title: WP_Role
Published: April 25, 2014
Last modified: April 28, 2025

---

# class WP_Role {}

## In this article

 * [Methods](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#user-contributed-notes)

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

Core class used to extend the user roles API.

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_Role::__construct](https://developer.wordpress.org/reference/classes/wp_role/__construct/) | Constructor – Set up object properties. | 
| [WP_Role::add_cap](https://developer.wordpress.org/reference/classes/wp_role/add_cap/) | Assign role a capability. | 
| [WP_Role::has_cap](https://developer.wordpress.org/reference/classes/wp_role/has_cap/) | Determines whether the role has the given capability. | 
| [WP_Role::remove_cap](https://developer.wordpress.org/reference/classes/wp_role/remove_cap/) | Removes a capability from a role. |

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

    ```php
    class WP_Role {
    	/**
    	 * Role name.
    	 *
    	 * @since 2.0.0
    	 * @var string
    	 */
    	public $name;

    	/**
    	 * List of capabilities the role contains.
    	 *
    	 * @since 2.0.0
    	 * @var bool[] Array of key/value pairs where keys represent a capability name and boolean values
    	 *             represent whether the role has that capability.
    	 */
    	public $capabilities;

    	/**
    	 * Constructor - Set up object properties.
    	 *
    	 * The list of capabilities must have the key as the name of the capability
    	 * and the value a boolean of whether it is granted to the role.
    	 *
    	 * @since 2.0.0
    	 *
    	 * @param string $role         Role name.
    	 * @param bool[] $capabilities Array of key/value pairs where keys represent a capability name and boolean values
    	 *                             represent whether the role has that capability.
    	 */
    	public function __construct( $role, $capabilities ) {
    		$this->name         = $role;
    		$this->capabilities = $capabilities;
    	}

    	/**
    	 * Assign role a capability.
    	 *
    	 * @since 2.0.0
    	 *
    	 * @param string $cap   Capability name.
    	 * @param bool   $grant Whether role has capability privilege.
    	 */
    	public function add_cap( $cap, $grant = true ) {
    		$this->capabilities[ $cap ] = $grant;
    		wp_roles()->add_cap( $this->name, $cap, $grant );
    	}

    	/**
    	 * Removes a capability from a role.
    	 *
    	 * @since 2.0.0
    	 *
    	 * @param string $cap Capability name.
    	 */
    	public function remove_cap( $cap ) {
    		unset( $this->capabilities[ $cap ] );
    		wp_roles()->remove_cap( $this->name, $cap );
    	}

    	/**
    	 * Determines whether the role has the given capability.
    	 *
    	 * @since 2.0.0
    	 *
    	 * @param string $cap Capability name.
    	 * @return bool Whether the role has the given capability.
    	 */
    	public function has_cap( $cap ) {
    		/**
    		 * Filters which capabilities a role has.
    		 *
    		 * @since 2.0.0
    		 *
    		 * @param bool[] $capabilities Array of key/value pairs where keys represent a capability name and boolean values
    		 *                             represent whether the role has that capability.
    		 * @param string $cap          Capability name.
    		 * @param string $name         Role name.
    		 */
    		$capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name );

    		if ( ! empty( $capabilities[ $cap ] ) ) {
    			return $capabilities[ $cap ];
    		} else {
    			return false;
    		}
    	}
    }
    ```

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

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_role/?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_role/?output_format=md#user-contributed-notes)󠁿

 1.  [Skip to note 2 content](https://developer.wordpress.org/reference/classes/wp_role/?output_format=md#comment-content-2002)
 2.   [tejas5989](https://profiles.wordpress.org/tejas5989/)  [  9 years ago  ](https://developer.wordpress.org/reference/classes/wp_role/#comment-2002)
 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_role%2F%23comment-2002)
    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_role%2F%23comment-2002)
 4. Creating the New Role
 5.     ```php
        $result = add_role(
            'Role Slug', // Ex. customer_role
            __( 'Role Label' ), // Customer Role
            array(
                'read'         =&gt; true,  // true allows this capability
                'edit_posts'   =&gt; true,
                'delete_posts' =&gt; false, // Use false to explicitly deny
            )
        );
    
        if ( null !== $result ) {
            echo 'New Role Created!';
        }
        else {
            echo 'Opps!! the Role already exists.';
        }
        ```
    
 6.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_role%2F%3Freplytocom%3D2002%23feedback-editor-2002)

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