用途:在构建、扩展或调试 WordPress REST API 端点/路由时使用,例如创建或更新 REST 路由、排查 401/403/404 及权限与 nonce 问题、为 REST 响应添加自定义字段或元数据、通过 REST 暴露自定义文章类型与分类法、实现 schema 与参数校验、调整响应链接/嵌入/分页。
必要输入:仓库根目录与目标插件/主题/mu-plugin 入口路径;目标命名空间与版本(如 my-plugin/v1)及路由;认证方式(cookie+nonce、应用密码或认证插件);目标 WordPress 版本约束(低于 6.9 需说明)。
主要能力与流程:先做项目分诊,运行 node skills/wp-project-triage/scripts/detect_wp_project.mjs,并搜索 register_rest_route、WP_REST_Controller、rest_api_init、show_in_rest、rest_base、rest_controller_class 等既有用法。选择方案:用 show_in_rest => true 加 rest_base 将 CPT/分类法暴露到 wp/v2,必要时提供 rest_controller_class;自定义端点用 register_rest_route() 挂到 rest_api_init,非平凡逻辑优先使用 WP_REST_Controller 子类。注册时使用唯一命名空间 vendor/v1,始终提供 permission_callback(公开端点用 __return_true),使用 WP_REST_Server 常量,通过 rest_ensure_response() 或 WP_REST_Response 返回数据,用 WP_Error 返回带明确状态码的错误。参数层面定义 type、default、required、validate_callback、sanitize_callback,优先用 JSON Schema 校验,端点内不要直接读 $_GET/$_POST,改用 WP_REST_Request。响应层面不要移除核心字段,添加字段用 register_rest_field,元数据用 register_meta 加 show_in_rest;需要未过滤内容时用 ?context=edit 获取 content.raw(需认证),可配 _fields=content.raw 精简响应;用 add_link() 添加关联资源链接。认证方面,wp-admin/JS 用 cookie 加 X-WP-Nonce(action 为 wp_rest),外部客户端用应用密码或认证插件,权限判断用能力检查。面向客户端要保证发现机制、_fields、_embed、_method、_envelope 与分页头可用,per_page 上限为 100。
验证:/wp-json/ 索引包含你的命名空间;OPTIONS 返回 schema;端点返回预期数据;权限失败正确返回 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;参数无效常因 schema 或校验回调缺失;字段缺失多因 show_in_rest 为 false、元数据未注册或 CPT 不支持自定义字段。版本支持或行为不明确时,应查阅 REST API Handbook 与核心文档,不要自行发明模式。