WordPress Abilities API 提供 REST 端点,允许外部系统通过 HTTP 请求发现和执行能力。
用户访问
访问所有 Abilities REST API 端点需要已认证的用户(请参阅认证部分)。执行单个 Ability 的访问权限根据 Ability 的 permission_callback() 进行限制。
控制 REST API 暴露
默认情况下,注册的 abilities 不通过 REST API 暴露。您可以通过在注册 ability 时使用 show_in_rest meta 来控制单个 ability 是否出现在 REST API 中:
show_in_rest => true:该 ability 列在 REST API 响应中,并可通过 REST 端点执行。show_in_rest => false(默认):该 ability 从 REST API 列表中隐藏,无法通过 REST 端点执行。该 ability 仍可通过wp_get_ability()和$ability->execute()供内部 PHP 使用。
meta 为 show_in_rest => false 的 abilities 如果通过 REST 端点访问,将返回 rest_ability_not_found 错误。
模式
Abilities API 端点位于 /wp-abilities/v1 命名空间下。
能力对象
Abilities 以 JSON 表示,结构如下:
{
"name": "wporg/get-site-info",
"label": "Get Site Information",
"description": "Retrieves basic information about the WordPress site.",
"category": "site-information",
"output_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Site name"
},
"url": {
"type": "string",
"format": "uri",
"description": "Site URL"
}
}
},
"meta": {
"annotations": {
"instructions": "",
"readonly": true,
"destructive": false,
"idempotent": false
}
}
}能力列表
定义
GET /wp-abilities/v1/abilities
参数
page(integer): Collection 的当前页。默认值:1。per_page(integer): 每页返回的最大项目数。默认值:50,最大值:100。category(string): 按分类 slug 过滤 abilities。
请求示例
curl https://example.com/wp-json/wp-abilities/v1/abilities响应示例
[
{
"name": "wporg/get-site-info",
"label": "Get Site Information",
"description": "Retrieves basic information about the WordPress site.",
"category": "site-information",
"output_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Site name"
},
"url": {
"type": "string",
"format": "uri",
"description": "Site URL"
}
}
},
"meta": {
"annotations": {
"instructions": "",
"readonly": false,
"destructive": true,
"idempotent": false
}
}
}
]分类列表
定义
GET /wp-abilities/v1/categories
参数
page(integer): Collection 的当前页。默认值:1。per_page(integer): 每页返回的最大项目数。默认值:50,最大值:100。
请求示例
curl -u 'USERNAME:APPLICATION_PASSWORD' \
https://example.com/wp-json/wp-abilities/v1/categories响应示例
[
{
"slug": "data-retrieval",
"label": "Data Retrieval",
"description": "Abilities that retrieve and return data from the WordPress site.",
"meta": {},
"_links": {
"self": [
{
"href": "https://example.com/wp-json/wp-abilities/v1/categories/data-retrieval"
}
],
"collection": [
{
"href": "https://example.com/wp-json/wp-abilities/v1/categories"
}
],
"abilities": [
{
"href": "https://example.com/wp-json/wp-abilities/v1/?category=data-retrieval"
}
]
}
}
]获取单个分类
定义
GET /wp-abilities/v1/categories/{slug}
参数
slug(string): 分类的唯一 slug。
请求示例
curl -u 'USERNAME:APPLICATION_PASSWORD' \
https://example.com/wp-json/wp-abilities/v1/categories/data-retrieval响应示例
{
"slug": "data-retrieval",
"label": "Data Retrieval",
"description": "Abilities that retrieve and return data from the WordPress site.",
"meta": {},
"_links": {
"self": [
{
"href": "https://example.com/wp-json/wp-abilities/v1/categories/data-retrieval"
}
],
"collection": [
{
"href": "https://example.com/wp-json/wp-abilities/v1/categories"
}
],
"abilities": [
{
"href": "https://example.com/wp-json/wp-abilities/v1?category=data-retrieval"
}
]
}
}获取单个能力
定义
GET /wp-abilities/v1/(?P<namespace>[a-z0-9-]+)/(?P<ability>[a-z0-9-]+)
参数
namespace(string): Ability 名称的命名空间部分。ability(string): Ability 名称部分。
请求示例
curl https://example.com/wp-json/wp-abilities/v1/my-plugin/get-site-info响应示例
{
"name": "wporg/get-site-info",
"label": "Get Site Information",
"description": "Retrieves basic information about the WordPress site.",
"category": "site-information",
"output_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Site name"
},
"url": {
"type": "string",
"format": "uri",
"description": "Site URL"
}
}
},
"meta": {
"annotations": {
"instructions": "",
"readonly": true,
"destructive": false,
"idempotent": false
}
}
}执行能力
Abilities 通过 /run 端点执行。所需的 HTTP 方法取决于 ability 的功能和 annotations:
- Read-only abilities 必须使用 GET (
readonly: true) - Regular abilities 在只读时(
readonly: true)必须使用 GET,在需要输入时(readonly: false)必须使用 POST - Destructive abilities (
destructive: true) 必须使用 DELETE
这种区分确保了只读操作使用安全的 HTTP 方法,这些方法可以被缓存且不会修改服务器状态。
定义
GET|POST|DELETE /wp-abilities/v1/(?P<namespace>[a-z0-9-]+)/(?P<ability>[a-z0-9-]+)/run
参数
namespace(string): Ability 名称的命名空间部分。ability(string): Ability 名称部分。input(integer|number|boolean|string|array|object|null): 可选的 ability 输入数据,由其输入 schema 定义。- 对于 GET 和 DELETE 请求:作为
input查询参数传递(URL 编码的 JSON) - 对于 POST 请求:在 JSON body 中传递
请求示例 (GET)
# No input
curl https://example.com/wp-json/wp-abilities/v1/my-plugin/get-site-info/run
# With input (URL-encoded)
curl "https://example.com/wp-json/wp-abilities/v1/my-plugin/get-user-info/run?input=%7B%22user_id%22%3A1%7D"请求示例 (POST)
# No input
curl -X POST https://example.com/wp-json/wp-abilities/v1/my-plugin/create-draft/run
# With input
curl -X POST \
-H "Content-Type: application/json" \
-d '{"input":{"option_name":"blogname","option_value":"New Site Name"}}' \
https://example.com/wp-json/wp-abilities/v1/my-plugin/update-option/run请求示例 (DELETE)
# With input (URL-encoded)
curl -X DELETE "https://example.com/wp-json/wp-abilities/v1/my-plugin/delete-post/run?input=%7B%22post_id%22%3A123%7D"响应示例 (Success)
{
"name": "My WordPress Site",
"url": "https://example.com"
}响应示例 (Error)
{
"code": "ability_invalid_permissions",
"message": "Ability \"my-plugin/update-option\" does not have necessary permission.",
"data": {
"status": 403
}
}Authentication
Abilities API 支持所有 WordPress REST API 身份验证方法:
- Cookie 身份验证(同源请求)
- 应用程序密码(推荐用于外部访问)
- 自定义身份验证插件
使用应用密码
curl -u 'USERNAME:APPLICATION_PASSWORD' \
https://example.com/wp-json/wp-abilities/v1错误响应
API 返回标准的 WordPress REST API 错误响应,包含以下常见代码:
ability_missing_input_schema– 该能力需要输入,但未提供。ability_invalid_input– 根据能力的模式,输入验证失败。ability_invalid_permissions– 当前用户没有执行该能力的权限。ability_invalid_output– 根据能力的模式,输出验证失败。ability_invalid_execute_callback– 能力的执行回调不可调用。rest_ability_not_found– 请求的能力未注册。rest_ability_category_not_found– 请求的类别未注册。