前言
一个朋友是做培训的,需要做一个官网。原来的站是静态的。现在需要一个动态的。考虑许久,我选择了使用wordpress来实现这个需求。经过1天折腾,终于成功。特此记录。
过程
-
搭建wordpress程序。
可以选择docker或者下载源码安装。没什么好说的。此时最新的版本是5.2.2 -
配置nginx
通用的nginx+php即可。这里特别注意,需要添加下面的配置,wordpress中的路由会依赖它。
location / {
try_files $uri $uri/ /index.php?$args;
}
try_files
这个指令可以按照参数顺序检查文件是否存在,以及返回第一个被找到的文件名,以"/"结尾的表示一个目录。如果文件没有找到,将被内部重定向到最后一个参数上。最后的参数是一个后备的URI,它必须存在,否则会报内部错误。
- 安装插件
需要安装2个插件。
api的插件 json-api
https://wordpress.org/plugins/json-api/
自定义字段插件 Advanced Custom Fields
https://wordpress.org/plugins/advanced-custom-fields/
推荐安装的插件
阿里云oss插件 aliyun-oss-support
aliyun-oss-support
该插件在插件库搜不到,未发布到官方库。
- 插件使用
自定义字段插件,没特别的地方。直接添加自己需要的字段即可。
api插件,提供的接口文档看这里。
https://wordpress.org/plugins/json-api/
这里需要注意,如果你的nginx配置不对,以下接口访问会404
http://www.example.org/api/get_recent_posts/
http://www.example.org/api/get_post/?post_id=47
http://www.example.org/api/get_tag_posts/?tag_slug=banana
- 跨域的问题
这个项目我使用的是前端部署在a.com下。wordpress部署在b.com下。
为了避免跨域问题,需要增加 反向代理配置。
例如a.com/api 指向 b.com/api
在a.com下增加配置
location /api/ {
proxy_pass http://b.com/api/
}
-
举例介绍接口
image.png
普通接口,例如检索指定分类的文章列表为例。
接口地址 get_category_posts
参数传递 分类的 id 或者分类的别名 slug 即可。
复杂的检索,例如检索 多个分类的文章。
接口地址 get_posts
参数传递 category__in 值为 1,2
则会查询 分类id 为1和2的文章。
更多复杂检索 参考 https://codex.wordpress.org/Class_Reference/WP_Query
- 最后
wordpress非常强大,无需写一行代码,我们就完成了复杂的需求实现。
网友评论