WordPress REST API 不止能发文章——通过 register_rest_route 自定义端点、用应用密码或 JWT 做鉴权、配合 WP_Query 与批量请求,你可以把 WP 变成任意前端或系统的数据后端。本文在「远程自动发文章」的基础上,讲透更进阶的玩法。
一、自定义端点:register_rest_route
默认路由(/wp-json/wp/v2/…)只是冰山一角。任何插件或主题都能在 rest_api_init 钩子上注册自己的路由:
add_action('rest_api_init', function () {
register_rest_route('myapp/v1', '/stats/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'myapp_get_stats',
'permission_callback' => function () { return current_user_can('read'); }
));
});
注意两点:(1)命名空间必须唯一,建议用「插件名/版本」;(2)务必写 permission_callback,否则 WP 会报「缺少必填参数」并可能暴露数据。
二、用控制器类管理多个端点
端点一多,散函数会很难维护。 WordPress 官方推荐控制器类:把命名空间、资源名、权限检查、 schema 收进一个类,对外暴露 get_items()/get_item() 等标准方法,避免全局函数命名冲突。
三、四种鉴权方式怎么选
| 方式 | 适用场景 | 特点 |
|---|---|---|
| Cookie + Nonce | 同域前端(主题/插件页) | 最简单,依赖登录态 |
| 应用密码(Application Password) | 远端脚本/CI 自动发文章 | 独立令牌,可随时吊销 |
| JWT 插件 | 移动端/第三方前端 | 无状态,需装插件 |
| OAuth/MCP | 对接外部服务 | 最重,适合平台级集成 |
远程自动发文章最稳的是应用密码,详见我们之前的 WordPress 7.0 内置 AI Client 里对 REST 调用的说明。
为什么不直接用 SQL 读库?
四、批量与过滤查询
- 列表过滤:?per_page=、?search=、?categories=、?after=/?before= 都能直接用;
- 排序:?orderby=date&order=desc;
- 批量写:REST 没有原生批量路由,可自己注册一个接收数组的端点,循环 wp_insert_post()。
五、提速:缓存与少查
对读多写少的端点,用 transients API(set_transient/get_transient)缓存结果,把数据库压力降一个量级。配合 全站编辑(FSE) 改造前端时,REST 数据也能一并提速。想让站点被 AI 引用、做好结构化数据,可参考 让 WordPress 被 AI 引用。
- 在插件里挂 rest_api_init 钩子。
- 用 register_rest_route 注册 myapp/v1/stats,methods=GET 。
- 写 callback 用 WP_Query 取数,rest_ensure_response() 返回。
- 写 permission_callback 校验 current_user_can,公开读用 ‘read’。
- 用 transient 缓存 5 分钟,降低数据库压力。







评论 (0)