Abilities API Functions

Core functions for ability registration and management.

Source: wp-includes/abilities-api.php


wp_register_ability()

Registers a new ability. Must be called during wp_abilities_api_init action.

php
wp_register_ability( string $name, array $args ): ?WP_Ability

Parameters

ParameterTypeDescription
$namestringNamespaced ability name (e.g., my-plugin/my-ability)
$argsarrayConfiguration array

Args

KeyTypeRequiredDescription
labelstringYesHuman-readable label
descriptionstringYesDetailed description
categorystringYesCategory slug (must be registered)
execute_callbackcallableYesExecution function
permission_callbackcallableYesPermission check function
input_schemaarrayNoJSON Schema for input validation
output_schemaarrayNoJSON Schema for output validation
metaarrayNoAdditional metadata
meta.annotationsarrayNoreadonly, destructive, idempotent hints
meta.show_in_restboolNoExpose via REST API (default: false)
ability_classstringNoCustom class extending WP_Ability

Returns

WP_Ability on success, null on failure.

Example

php
add_action( 'wp_abilities_api_init', function() {
    wp_register_ability( 'my-plugin/analyze-text', array(
        'label'               => __( 'Analyze Text', 'my-plugin' ),
        'description'         => __( 'Performs sentiment analysis.', 'my-plugin' ),
        'category'            => 'text-processing',
        'execute_callback'    => 'my_plugin_analyze_text',
        'permission_callback' => fn() => current_user_can( 'edit_posts' ),
        'input_schema'        => array(
            'type'      => 'string',
            'minLength' => 10,
            'required'  => true,
        ),
        'output_schema'       => array(
            'type' => 'string',
            'enum' => array( 'positive', 'negative', 'neutral' ),
        ),
        'meta'                => array(
            'annotations'  => array( 'readonly' => true ),
            'show_in_rest' => true,
        ),
    ) );
} );

wp_unregister_ability()

Removes a registered ability.

php
wp_unregister_ability( string $name ): ?WP_Ability

Parameters

ParameterTypeDescription
$namestringAbility name to unregister

Returns

Unregistered WP_Ability on success, null if not found.


wp_has_ability()

Checks if an ability is registered.

php
wp_has_ability( string $name ): bool

Parameters

ParameterTypeDescription
$namestringAbility name to check

Returns

true if registered, false otherwise.


wp_get_ability()

Retrieves a registered ability.

php
wp_get_ability( string $name ): ?WP_Ability

Parameters

ParameterTypeDescription
$namestringAbility name

Returns

WP_Ability instance or null if not registered.


wp_get_abilities()

Retrieves all registered abilities.

php
wp_get_abilities(): array

Returns

Array of WP_Ability instances.


wp_register_ability_category()

Registers a new ability category. Must be called during wp_abilities_api_categories_init action.

php
wp_register_ability_category( string $slug, array $args ): ?WP_Ability_Category

Parameters

ParameterTypeDescription
$slugstringCategory slug
$argsarrayConfiguration array

Args

KeyTypeRequiredDescription
labelstringYesHuman-readable label
descriptionstringYesCategory description
metaarrayNoAdditional metadata

Returns

WP_Ability_Category on success, null on failure.

Example

php
add_action( 'wp_abilities_api_categories_init', function() {
    wp_register_ability_category( 'text-processing', array(
        'label'       => __( 'Text Processing', 'my-plugin' ),
        'description' => __( 'Abilities for analyzing text.', 'my-plugin' ),
    ) );
} );

wp_unregister_ability_category()

Removes a registered category.

php
wp_unregister_ability_category( string $slug ): ?WP_Ability_Category

wp_has_ability_category()

Checks if a category is registered.

php
wp_has_ability_category( string $slug ): bool

wp_get_ability_category()

Retrieves a registered category.

php
wp_get_ability_category( string $slug ): ?WP_Ability_Category

wp_get_ability_categories()

Retrieves all registered categories.

php
wp_get_ability_categories(): array