「WordPress」- REST API Handbook

  CREATED BY JENKINSBOT

问题描述

通过 WordPress API 可以操作 WordPress 站点的方方面面,比如文章增删改查、选项管理、主题修改、插件开发等等。

按照功能特征,这些 API 被分为不同的章节,详细内容参考官方 WordPress APIs 手册。

我们这里主要关注 REST API,通过 REST API 能够操作 WordPress 站点,比如 文章变更、分类设置等等。

该笔记将记录:在 WordPress 中,如何通过 REST API 进行文档操作,以及常见问题解决办法。

解决方案

在旧版本(不记得什么时候了)的 WordPress 中,并没有内置 REST API,貌似需要单独安装;
在新版本(也不知道哪个版本开始)的 WordPress 中,已经内置了 REST API,可以直接使用;

# 03/13/2020 目前,我们使用的是 4.9 版本,所以这里是基于 WordPress 4.9 版本进行介绍;
# 05/08/2022 现在,我们使用 5.9.3 版本,追随官方更新,该笔记是对之前内容不断补充的结果;

参考 REST API Handbook 手册,以获取更多的官方说明。

第一步、添加 NGINX 重写

接口地址通常是 http://example.org/wp-json/wp/v2 的形式,鉴于 wp-json/ 并非目录,所以需要配置 Nginx 重写来传递给 index.php 处理:

location / {
	try_files $uri $uri/ /index.php?$args;
}

当修改配置且重启 Nginx 后,可以访问 http://example.org/wp-json/wp/v2 以验证是否配置成功。

第二步、安装认证插件并配置

如果没有认证插件,只能进行查询,不能进行增删改。参考 Authentication 手册,获取对于认证相关内容的官方说明。

我们采用 Application Passwords 认证插件,创建密码的大致流程如下(详细的使用方法请仔细阅读插件描述):
1)在管理页面,进入某个用户的信息设置页面;
2)页面最底部,New Application Password Name,该字段仅是标识密码,仅注释作用;
3)点击 Add New Application Password 按钮,将自动生成密码,请注意保存;

# 05/08/2022 我们发现该插件已经合并到 WordPress 5.6 版本(Application Passwords);

第三步、修改文章测试

上述配置完成后,即可访问REST API来测试文章的创建:

# 如下命令,将创建标题为 New Title 的文章:
curl --header "Authorization: Basic $(echo -n 'username:application-passowrd' | base64)"     \
    -X POST                                                                                  \
    -d "title=New Title"                                                                     \
    https://example.com/wp-json/wp/v2/pages

1)Authorization: Basic ... 表示使用基础认证,建议使用 curl 推荐的传参方式。
2)认证信息,通过 echo -n "username:password" | base64 命令生成;

注意,在命令echo -n "admin:password"中,
1)amdin是登录管理后台的帐号,不是创建认证口令时的命名,这点插件描述中已经注明;
2)password不是登录管理后台的admin密码,而是在 Application Passwords 认证插件中创建的口令;

相关文档

文章、分类、评论等等的接口地址参考「Reference」手册。

REST API Handbook / Reference / Categories
REST API Handbook / Reference / Posts

附加说明

不要用 SHELL 脚本来实现文章的导入

最初版本我使用了Shell实现了导入程序,但是,太慢了,也进行了优化,最后才发现瓶颈在于Shell中的for循环内部的关联数组赋值,当数据量比较大的时候,for循环的内部关联数组操作特别慢。后来换Python重写了,嗯,特别块。所以,我觉得:以后但凡涉及到大量的数据处理或者业务功能方面的东西,不再使用Shell脚本处理。而只用Shell处理系统维护管理性的任务。

参考文献

WP REST API
REST API Handbook
REST API – Create, Update or Delete posts using Basic Auth and HTTP API