[wp-trac] [WordPress Trac] #64098: Introduce Abilities API

WordPress Trac noreply at wordpress.org
Tue Oct 21 13:50:27 UTC 2025


#64098: Introduce Abilities API
--------------------------------------------------+---------------------
 Reporter:  gziolo                                |       Owner:  gziolo
     Type:  feature request                       |      Status:  closed
 Priority:  normal                                |   Milestone:  6.9
Component:  General                               |     Version:  trunk
 Severity:  normal                                |  Resolution:  fixed
 Keywords:  has-patch 2nd-opinion has-unit-tests  |     Focuses:
--------------------------------------------------+---------------------
Changes (by gziolo):

 * status:  assigned => closed
 * resolution:   => fixed


Comment:

 In [changeset:"61032" 61032]:
 {{{
 #!CommitTicketReference repository="" revision="61032"
 Abilities API: Introduce server-side registry and REST API endpoints

 Feature proposal at https://make.wordpress.org/ai/2025/07/17/abilities-
 api/.
 Project developed in https://github.com/WordPress/abilities-api.

 Introduces a new Abilities API that allows WordPress plugins and themes to
 register and execute custom abilities with built-in permission checking,
 input/output validation via JSON Schema, and REST API integration.

 ## Public Functions

 ### Ability Management
 - `wp_register_ability( string $name, array $args ): ?WP_Ability` -
 Registers a new ability (must be called on `wp_abilities_api_init` hook)
 - `wp_unregister_ability( string $name ): ?WP_Ability` - Unregisters an
 ability
 - `wp_has_ability( string $name ): bool` - Checks if an ability is
 registered
 - `wp_get_ability( string $name ): ?WP_Ability` - Retrieves a registered
 ability
 - `wp_get_abilities(): array` - Retrieves all registered abilities

 ### Ability Category Management
 - `wp_register_ability_category( string $slug, array $args ):
 ?WP_Ability_Category` - Registers an ability category (must be called on
 `wp_abilities_api_categories_init` hook)
 - `wp_unregister_ability_category( string $slug ): ?WP_Ability_Category` -
 Unregisters an ability category
 - `wp_has_ability_category( string $slug ): bool` - Checks if an ability
 category is registered
 - `wp_get_ability_category( string $slug ): ?WP_Ability_Category` -
 Retrieves a registered ability category
 - `wp_get_ability_categories(): array` - Retrieves all registered ability
 categories

 ## Public Classes

 - `WP_Ability` - Encapsulates ability properties and methods (execute,
 check_permission, validate_input, etc.)
 - `WP_Ability_Category` - Encapsulates ability category properties
 - `WP_Abilities_Registry` - Manages ability registration and lookup
 (private, accessed via functions)
 - `WP_Ability_Categories_Registry` - Manages ability category registration
 (private, accessed via functions)
 - `WP_REST_Abilities_V1_List_Controller` - REST controller for listing
 abilities
 - `WP_REST_Abilities_V1_Run_Controller` - REST controller for executing
 abilities

 ## REST API Endpoints

 ### Namespace: `wp-abilities/v1`

 #### List Abilities
 - `GET /wp-abilities/v1/abilities` - Retrieve all registered abilities
   - Query parameters: `page`, `per_page`, `category`

 #### Get Single Ability
 - `GET /wp-abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)` - Retrieve a
 specific ability by name

 #### Execute Ability
 - `GET|POST|DELETE /wp-
 abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)/run` - Execute an
 ability
   - Supports multiple HTTP methods based on ability annotations
   - Validates input against ability's input schema
   - Validates output against ability's output schema
   - Performs permission checks via ability's permission callback

 ## Hooks

 ### Actions
 - `wp_abilities_api_categories_init` - Fired when ability categories
 registry is initialized (register categories here)
 - `wp_abilities_api_init` - Fired when abilities registry is initialized
 (register abilities here)
 - `wp_before_execute_ability` - Fired before an ability gets executed,
 after input validation and permissions check

 - `wp_after_execute_ability` - Fires immediately after an ability finished
 executing

 ### Filters
 - `wp_register_ability_category_args` - Filters ability category arguments
 before registration
 - `wp_register_ability_args` - Filters ability arguments before
 registration

 Developed in https://github.com/WordPress/wordpress-develop/pull/9410.

 Props gziolo, jorbin, justlevine, westonruter, jason_the_adams, flixos90,
 karmatosed, timothyblynjacobs.
 Fixes #64098.
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64098#comment:41>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list