关于 wp-rest-api
面向 WordPress 开发者的 REST API 工作流技能,涵盖路由设计、验证、响应、身份验证与检查。
主要功能
- 01路由与端点设计
- 02权限与身份验证指导
- 03参数架构与验证
- 04自定义字段、元数据和链接
- 05发现机制与分页检查
- 06错误排查与验证
适用场景
- 01添加自定义 REST 端点
- 02通过 REST 暴露文章类型或分类法
- 03排查 REST 权限错误
- 04为响应添加经过验证的字段
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wordpress/ agent-skills --skill wp-rest-api安装后在 Claude Code 中输入/wp-rest-api确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/authentication.mdcustom-content-types.mddiscovery-and-params.mdresponses-and-fields.mdroutes-and-endpoints.mdschema.md详细介绍
WP REST API
适用场景
在以下情况下使用此技能:
- 创建或更新 REST 路由/端点
- 调试 401/403/404 错误或权限/nonce 问题
- 向 REST 响应添加自定义字段/meta
- 通过 REST 暴露自定义文章类型或分类法
- 实现架构 + 参数验证
- 调整响应链接/嵌入/分页
所需输入
- 仓库根目录 + 目标插件/主题/mu-plugin(入口文件的路径)。
- 预期的命名空间 + 版本(例如
my-plugin/v1)和路由。 - 身份验证模式(Cookie + nonce、应用程序密码或身份验证插件)。
- 目标 WordPress 版本限制(低于 7.0 时请注明)。
流程
0) 排查并定位 REST 用法
- 运行排查:
node skills/wp-project-triage/scripts/detect_wp_project.mjs
- 搜索现有 REST 用法:
register_rest_routeWP_REST_Controllerrest_api_initshow_in_rest、rest_base、rest_controller_class
如果这是完整站点仓库,请先选定具体插件/主题,再修改代码。
1) 选择正确的方法
- 在
wp/v2中暴露 CPT/分类法:- 使用
show_in_rest => true,并在需要时设置rest_base。 - 可选择提供
rest_controller_class。 - 阅读
references/custom-content-types.md。
- 使用
- 自定义端点:
- 在
rest_api_init上使用register_rest_route()。 - 对于任何非简单端点,优先使用控制器类(
WP_REST_Controller子类)。 - 阅读
references/routes-and-endpoints.md和references/schema.md。
- 在
2) 安全地注册路由(命名空间、方法、权限)
- 使用唯一的命名空间
vendor/v1;除非属于核心,否则避免使用wp/*。 - 始终提供
permission_callback(公开端点可使用__return_true)。 - 使用
WP_REST_Server::READABLE/CREATABLE/EDITABLE/DELETABLE常量。 - 通过
rest_ensure_response()或WP_REST_Response返回数据。 - 使用带有显式
status的WP_Error返回错误。
阅读 references/routes-and-endpoints.md。
3) 验证/清理请求参数
- 在
args中定义type、default、required、validate_callback、sanitize_callback。 - 优先使用 JSON Schema 验证:先调用
rest_validate_value_from_schema,再调用rest_sanitize_value_from_schema。 - 切勿在端点内直接读取
$_GET/$_POST;请使用WP_REST_Request。
阅读 references/schema.md。
4) 响应、字段和链接
- 不要从默认端点中移除核心字段;应添加字段。
- 对于计算字段,使用
register_rest_field;对于 meta,使用带有show_in_rest的register_meta。 - 对于
object/array类型的 meta,请在show_in_rest.schema中定义架构。 - 如果需要未经筛选的文章内容(例如,ToC 插件注入 HTML),请请求
?context=edit以访问content.raw(需要身份验证)。同时使用_fields=content.raw以缩减响应内容。 - 使用
WP_REST_Response::add_link()添加相关资源链接。
阅读 references/responses-and-fields.md。
5) 身份验证与授权
- 对于 wp-admin/JS:使用 Cookie 身份验证 +
X-WP-Nonce(操作wp_rest)。 - 对于外部客户端:使用应用程序密码(basic auth)或身份验证插件。
- 在
permission_callback中进行能力检查(授权),而不只是检查是否“已登录”。
阅读 references/authentication.md。
6) 面向客户端的行为(发现、分页、嵌入)
- 确保发现机制正常工作(
Link标头或<link rel="https://api.w.org/">)。 - 支持
_fields、_embed、_method、_envelope和分页标头。 - 请记住,
per_page上限为 100。
阅读 references/discovery-and-params.md。
验证
/wp-json/索引包含你的命名空间。- 对路由发送
OPTIONS请求时会返回架构(如果已提供)。 - 端点返回预期数据;权限验证失败时会按预期返回 401/403。
- 当
show_in_rest为 true 时,CPT/分类法路由会显示在wp/v2下。 - 运行仓库 lint/测试以及任何 PHP/JS 构建步骤。
故障模式/调试
- 404:
rest_api_init未触发、路由拼写错误,或固定链接已关闭(使用?rest_route=)。 - 401/403:缺少 nonce/身份验证,或
permission_callback过于严格。 - 缺少
permission_callback时出现_doing_it_wrong:添加该回调(若为公开接口,可使用__return_true)。 - 参数无效:缺少或错误的
args架构,或验证回调有误。 - 字段缺失:
show_in_rest为 false、meta 未注册,或 CPT 不支持custom-fields。
升级处理
如果不确定版本支持情况或行为,请先查阅 REST API Handbook 和核心文档,再考虑采用其他模式。
评论
支持 Markdown