关于 wp-rest-api
为 WordPress 开发者提供 REST API 实现指导,涵盖自定义路由、内容类型、权限、验证与响应处理,并包含排错和验证步骤。
主要功能
- 01注册安全的 REST 路由
- 02配置内容类型与分类法
- 03验证和清理请求参数
- 04扩展字段、元数据与链接
- 05排查认证及权限错误
适用场景
- 01为插件或主题添加自定义端点
- 02向 REST 响应公开自定义内容类型
- 03诊断 401、403 或 404 错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ firecrawl/ 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 响应添加自定义字段/元数据
- 通过 REST 暴露自定义文章类型或分类法
- 实现架构和参数验证
- 调整响应链接、嵌入内容或分页
所需输入
- 仓库根目录,以及目标插件/主题/mu-plugin(入口文件路径)。
- 所需的命名空间和版本(例如
my-plugin/v1)及路由。 - 身份验证模式(Cookie + nonce、应用程序密码或身份验证插件)。
- 目标 WordPress 版本限制(如果低于 6.9,请说明)。
操作步骤
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) 验证/清理请求参数
- 使用
type、default、required、validate_callback、sanitize_callback定义args。 - 优先使用 JSON Schema 验证:先调用
rest_validate_value_from_schema,再调用rest_sanitize_value_from_schema。 - 切勿在端点中直接读取
$_GET/$_POST;请使用WP_REST_Request。
阅读 references/schema.md。
4) 响应、字段和链接
- 不要从默认端点中移除核心字段;应添加字段。
- 对计算字段使用
register_rest_field;对元数据使用带有show_in_rest的register_meta。 - 对于
object/array类型的元数据,请在show_in_rest.schema中定义架构。 - 如果需要未经过滤的文章内容(例如,目录插件注入 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)。 - 对于外部客户端:使用应用程序密码(基本身份验证)或身份验证插件。
- 在
permission_callback中进行能力检查(授权),而不只是检查“是否已登录”。
阅读 references/authentication.md。
6) 面向客户端的行为(发现、分页、嵌入)
- 确保能够发现 API(
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