WP Abilities API
When to use
Use this skill when the task involves:
- registering abilities or ability categories in PHP,
- exposing abilities to clients via REST (
wp-abilities/v1),
- consuming abilities in JS (notably
@wordpress/abilities),
- diagnosing “ability doesn’t show up” / “client can’t see ability” / “REST returns empty”.
Inputs required
- Repo root (run
wp-project-triage first if you haven’t).
- Target WordPress version(s) and whether this is WP core or a plugin/theme.
- Where the change should live (plugin vs theme vs mu-plugin).
Procedure
1) Confirm availability and version constraints
- If this is WP core work, check
signals.isWpCoreCheckout and versions.wordpress.core.
- If the project targets WP < 6.9, you may need the Abilities API plugin/package rather than relying on core.
2) Find existing Abilities usage
Search for these in the repo:
wp_register_ability(
wp_register_ability_category(
wp_abilities_api_init
wp_abilities_api_categories_init
wp-abilities/v1
@wordpress/abilities
If none exist, decide whether you’re introducing Abilities API fresh (new registrations + client consumption) or only consuming.
3) Register categories (optional)
If you need a logical grouping, register an ability category early (see references/php-registration.md).
4) Register abilities (PHP)
Implement the ability in PHP registration with:
- stable
id (namespaced),
label/description,
category,
meta:
- add
readonly: true when the ability is informational,
- set
show_in_rest: true for abilities you want visible to clients.
Use the documented init hooks for Abilities API registration so they load at the right time (see references/php-registration.md).
5) Confirm REST exposure
- Verify the REST endpoints exist and return expected results (see
references/rest-api.md).
- If the client still can’t see the ability, confirm
meta.show_in_rest is enabled and you’re querying the right endpoint.
6) Consume from JS (if needed)
- Prefer
@wordpress/abilities APIs for client-side access and checks.
- Ensure build tooling includes the dependency and the project’s build pipeline bundles it.
Verification
wp-project-triage indicates signals.usesAbilitiesApi: true after your change (if applicable).
- REST check (in a WP environment): endpoints under
wp-abilities/v1 return your ability and category when expected.
- If the repo has tests, add/update coverage near:
- PHP: ability registration and meta exposure
- JS: ability consumption and UI gating
Failure modes / debugging
- Ability never appears:
- registration code not running (wrong hook / file not loaded),
- missing
meta.show_in_rest,
- incorrect category/ID mismatch.
- REST shows ability but JS doesn’t:
- wrong REST base/namespace,
- JS dependency not bundled,
- caching (object/page caches) masking changes.
Escalation
- If you’re uncertain about version support, confirm target WP core versions and whether Abilities API is expected from core or as a plugin.
- For canonical details, consult:
references/rest-api.md
references/php-registration.md
1---2name: wp-abilities-api3description: WP Abilities API4---5# WP Abilities API67## When to use89Use this skill when the task involves:1011- registering abilities or ability categories in PHP,12- exposing abilities to clients via REST (`wp-abilities/v1`),13- consuming abilities in JS (notably `@wordpress/abilities`),14- diagnosing “ability doesn’t show up” / “client can’t see ability” / “REST returns empty”.1516## Inputs required1718- Repo root (run `wp-project-triage` first if you haven’t).19- Target WordPress version(s) and whether this is WP core or a plugin/theme.20- Where the change should live (plugin vs theme vs mu-plugin).2122## Procedure2324### 1) Confirm availability and version constraints2526- If this is WP core work, check `signals.isWpCoreCheckout` and `versions.wordpress.core`.27- If the project targets WP < 6.9, you may need the Abilities API plugin/package rather than relying on core.2829### 2) Find existing Abilities usage3031Search for these in the repo:3233- `wp_register_ability(`34- `wp_register_ability_category(`35- `wp_abilities_api_init`36- `wp_abilities_api_categories_init`37- `wp-abilities/v1`38- `@wordpress/abilities`3940If none exist, decide whether you’re introducing Abilities API fresh (new registrations + client consumption) or only consuming.4142### 3) Register categories (optional)4344If you need a logical grouping, register an ability category early (see `references/php-registration.md`).4546### 4) Register abilities (PHP)4748Implement the ability in PHP registration with:4950- stable `id` (namespaced),51- `label`/`description`,52- `category`,53- `meta`:54 - add `readonly: true` when the ability is informational,55 - set `show_in_rest: true` for abilities you want visible to clients.5657Use the documented init hooks for Abilities API registration so they load at the right time (see `references/php-registration.md`).5859### 5) Confirm REST exposure6061- Verify the REST endpoints exist and return expected results (see `references/rest-api.md`).62- If the client still can’t see the ability, confirm `meta.show_in_rest` is enabled and you’re querying the right endpoint.6364### 6) Consume from JS (if needed)6566- Prefer `@wordpress/abilities` APIs for client-side access and checks.67- Ensure build tooling includes the dependency and the project’s build pipeline bundles it.6869## Verification7071- `wp-project-triage` indicates `signals.usesAbilitiesApi: true` after your change (if applicable).72- REST check (in a WP environment): endpoints under `wp-abilities/v1` return your ability and category when expected.73- If the repo has tests, add/update coverage near:74 - PHP: ability registration and meta exposure75 - JS: ability consumption and UI gating7677## Failure modes / debugging7879- Ability never appears:80 - registration code not running (wrong hook / file not loaded),81 - missing `meta.show_in_rest`,82 - incorrect category/ID mismatch.83- REST shows ability but JS doesn’t:84 - wrong REST base/namespace,85 - JS dependency not bundled,86 - caching (object/page caches) masking changes.8788## Escalation8990- If you’re uncertain about version support, confirm target WP core versions and whether Abilities API is expected from core or as a plugin.91- For canonical details, consult:92 - `references/rest-api.md`93 - `references/php-registration.md`