跳到主内容

WordPress REST API 进阶实战:自定义端点、鉴权与批量操作

100%
WordPress REST API 进阶实战:自定义端点、鉴权与批量操作

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() 等标准方法,避免全局函数命名冲突。

控制器类里每个方法都配独立的 permission_callback,公开读用 current_user_can(‘read’),写操作务必校验权限,别用 __return_true 裸奔。

三、四种鉴权方式怎么选

方式适用场景特点
Cookie + Nonce同域前端(主题/插件页)最简单,依赖登录态
应用密码(Application Password)远端脚本/CI 自动发文章独立令牌,可随时吊销
JWT 插件移动端/第三方前端无状态,需装插件
OAuth/MCP对接外部服务最重,适合平台级集成

远程自动发文章最稳的是应用密码,详见我们之前的 WordPress 7.0 内置 AI Client 里对 REST 调用的说明。

为什么不直接用 SQL 读库?
直接读库绕过了 WP 的权限、缓存和内容过滤,容易把草稿、未审核评论甚至私密内容泄露出去。走 REST API 能复用 WP 的鉴权与格式化,安全且向前兼容。

四、批量与过滤查询

  • 列表过滤:?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 引用。


  1. 在插件里挂 rest_api_init 钩子。

  2. 用 register_rest_route 注册 myapp/v1/stats,methods=GET 。

  3. 写 callback 用 WP_Query 取数,rest_ensure_response() 返回。

  4. 写 permission_callback 校验 current_user_can,公开读用 ‘read’。

  5. 用 transient 缓存 5 分钟,降低数据库压力。

查看 WordPress REST API 手册

自定义端点一定要写 namespace 吗?
必须。 WP 要求路由带命名空间(如 myapp/v1),空命名空间会触发 _doing_it_wrong 并报错。

没有 permission_callback 会怎样?
WP 5.5+ 会报「缺少必填 permission_callback 参数」;公开端点也要显式传 __return_true,不能省略。

REST API 能被缓存吗?
能。读接口建议用 transients 缓存;前端还可配合页面缓存,把耗时查询挡在数据库外。

应用密码和登录密码一样吗?
不一样。应用密码是 WP 后台生成的独立令牌,专用于 REST 基础鉴权,可单独吊销、不影响账号登录。

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

747文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示