Title: WP_Ability_Category
Published: February 24, 2026

---

# class WP_Ability_Category {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#description)
    - [See also](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#see-also)
 * [Methods](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#changelog)

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

Encapsulates the properties and methods related to a specific ability category.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#description)󠁿

### 󠀁[See also](https://developer.wordpress.org/reference/classes/wp_ability_category/?output_format=md#see-also)󠁿

 * [WP_Ability_Categories_Registry](https://developer.wordpress.org/reference/classes/wp_ability_categories_registry/)

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

| Name | Description | 
| [WP_Ability_Category::__construct](https://developer.wordpress.org/reference/classes/wp_ability_category/__construct/) | Constructor. | 
| [WP_Ability_Category::__sleep](https://developer.wordpress.org/reference/classes/wp_ability_category/__sleep/) | Sleep magic method. | 
| [WP_Ability_Category::__wakeup](https://developer.wordpress.org/reference/classes/wp_ability_category/__wakeup/) | Wakeup magic method. | 
| [WP_Ability_Category::get_description](https://developer.wordpress.org/reference/classes/wp_ability_category/get_description/) | Retrieves the detailed description for the ability category. | 
| [WP_Ability_Category::get_label](https://developer.wordpress.org/reference/classes/wp_ability_category/get_label/) | Retrieves the human-readable label for the ability category. | 
| [WP_Ability_Category::get_meta](https://developer.wordpress.org/reference/classes/wp_ability_category/get_meta/) | Retrieves the metadata for the ability category. | 
| [WP_Ability_Category::get_slug](https://developer.wordpress.org/reference/classes/wp_ability_category/get_slug/) | Retrieves the slug of the ability category. | 
| [WP_Ability_Category::prepare_properties](https://developer.wordpress.org/reference/classes/wp_ability_category/prepare_properties/) | Prepares and validates the properties used to instantiate the ability category. |

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

    ```php
    final class WP_Ability_Category {

    	/**
    	 * The unique slug for the ability category.
    	 *
    	 * @since 6.9.0
    	 * @var string
    	 */
    	protected $slug;

    	/**
    	 * The human-readable ability category label.
    	 *
    	 * @since 6.9.0
    	 * @var string
    	 */
    	protected $label;

    	/**
    	 * The detailed ability category description.
    	 *
    	 * @since 6.9.0
    	 * @var string
    	 */
    	protected $description;

    	/**
    	 * The optional ability category metadata.
    	 *
    	 * @since 6.9.0
    	 * @var array<string, mixed>
    	 */
    	protected $meta = array();

    	/**
    	 * Constructor.
    	 *
    	 * Do not use this constructor directly. Instead, use the `wp_register_ability_category()` function.
    	 *
    	 * @access private
    	 *
    	 * @since 6.9.0
    	 *
    	 * @see wp_register_ability_category()
    	 *
    	 * @param string               $slug The unique slug for the ability category.
    	 * @param array<string, mixed> $args {
    	 *     An associative array of arguments for the ability category.
    	 *
    	 *     @type string               $label       The human-readable label for the ability category.
    	 *     @type string               $description A description of the ability category.
    	 *     @type array<string, mixed> $meta        Optional. Additional metadata for the ability category.
    	 * }
    	 */
    	public function __construct( string $slug, array $args ) {
    		if ( empty( $slug ) ) {
    			throw new InvalidArgumentException(
    				__( 'The ability category slug cannot be empty.' )
    			);
    		}

    		$this->slug = $slug;

    		$properties = $this->prepare_properties( $args );

    		foreach ( $properties as $property_name => $property_value ) {
    			if ( ! property_exists( $this, $property_name ) ) {
    				_doing_it_wrong(
    					__METHOD__,
    					sprintf(
    						/* translators: %s: Property name. */
    						__( 'Property "%1$s" is not a valid property for ability category "%2$s". Please check the %3$s class for allowed properties.' ),
    						'<code>' . esc_html( $property_name ) . '</code>',
    						'<code>' . esc_html( $this->slug ) . '</code>',
    						'<code>' . __CLASS__ . '</code>'
    					),
    					'6.9.0'
    				);
    				continue;
    			}

    			$this->$property_name = $property_value;
    		}
    	}

    	/**
    	 * Prepares and validates the properties used to instantiate the ability category.
    	 *
    	 * @since 6.9.0
    	 *
    	 * @param array<string, mixed> $args $args {
    	 *     An associative array of arguments used to instantiate the ability category class.
    	 *
    	 *     @type string               $label       The human-readable label for the ability category.
    	 *     @type string               $description A description of the ability category.
    	 *     @type array<string, mixed> $meta        Optional. Additional metadata for the ability category.
    	 * }
    	 * @return array<string, mixed> $args {
    	 *     An associative array with validated and prepared ability category properties.
    	 *
    	 *     @type string               $label       The human-readable label for the ability category.
    	 *     @type string               $description A description of the ability category.
    	 *     @type array<string, mixed> $meta        Optional. Additional metadata for the ability category.
    	 * }
    	 * @throws InvalidArgumentException if an argument is invalid.
    	 */
    	protected function prepare_properties( array $args ): array {
    		// Required args must be present and of the correct type.
    		if ( empty( $args['label'] ) || ! is_string( $args['label'] ) ) {
    			throw new InvalidArgumentException(
    				__( 'The ability category properties must contain a `label` string.' )
    			);
    		}

    		if ( empty( $args['description'] ) || ! is_string( $args['description'] ) ) {
    			throw new InvalidArgumentException(
    				__( 'The ability category properties must contain a `description` string.' )
    			);
    		}

    		// Optional args only need to be of the correct type if they are present.
    		if ( isset( $args['meta'] ) && ! is_array( $args['meta'] ) ) {
    			throw new InvalidArgumentException(
    				__( 'The ability category properties should provide a valid `meta` array.' )
    			);
    		}

    		return $args;
    	}

    	/**
    	 * Retrieves the slug of the ability category.
    	 *
    	 * @since 6.9.0
    	 *
    	 * @return string The ability category slug.
    	 */
    	public function get_slug(): string {
    		return $this->slug;
    	}

    	/**
    	 * Retrieves the human-readable label for the ability category.
    	 *
    	 * @since 6.9.0
    	 *
    	 * @return string The human-readable ability category label.
    	 */
    	public function get_label(): string {
    		return $this->label;
    	}

    	/**
    	 * Retrieves the detailed description for the ability category.
    	 *
    	 * @since 6.9.0
    	 *
    	 * @return string The detailed description for the ability category.
    	 */
    	public function get_description(): string {
    		return $this->description;
    	}

    	/**
    	 * Retrieves the metadata for the ability category.
    	 *
    	 * @since 6.9.0
    	 *
    	 * @return array<string,mixed> The metadata for the ability category.
    	 */
    	public function get_meta(): array {
    		return $this->meta;
    	}

    	/**
    	 * Wakeup magic method.
    	 *
    	 * @since 6.9.0
    	 * @throws LogicException If the ability category object is unserialized.
    	 *                        This is a security hardening measure to prevent unserialization of the ability category.
    	 */
    	public function __wakeup(): void {
    		throw new LogicException( __CLASS__ . ' should never be unserialized.' );
    	}

    	/**
    	 * Sleep magic method.
    	 *
    	 * @since 6.9.0
    	 * @throws LogicException If the ability category object is serialized.
    	 *                        This is a security hardening measure to prevent serialization of the ability category.
    	 */
    	public function __sleep(): array {
    		throw new LogicException( __CLASS__ . ' should never be serialized.' );
    	}
    }
    ```

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

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

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

## User Contributed Notes

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