将bbPress与微信小程序结合起来的设置步骤比较复杂,本文仅作备忘,以实现思路为主,不涉及具体代码。
安装bbPress插件
在主题文件夹内的functions.php中添加一段代码来为bbpress的帖子开通特色图像功能。
安装Quick Featured Images插件
设置文章(包含帖子)内容的第一张图为特色图像。
安装QQWorld自动保存图片插件
将远程图片保存在wordpress本地服务器(这个插件的设置特色图片功能请勿勾选)。
安装ACF插件
为帖子topic新增自定义自段touxiang(发帖者头像)。
安装ACF to REST API插件
在主题文件夹下functions.php里添加代码激活API输出内容里新增的ACF字段。然后回到ACF设置界面,将新增的自定义字段选项里的 Show in REST API 和 Edit in REST API 勾选为YES。
安装bbPress API插件
本步骤需要改造 inc/forums.php 和 inc/topics.php,我们需要为帖子增加摘要、特色图像、发帖者头像这三个变量,
详解forums.php:
帖子摘要可以直接通过wordpress自带函数wp_filter_nohtml_kses
和mb_strimwidth
对帖子的content进行截取来获得;
因为我们需要调用用户的微信头像作为发帖者头像,所以在小程序里我们就不采用wordpress的系统头像了。发帖者头像需要通过ACF插件来为帖子topic添加一个自定义字段,然后用ACF的函数get_field
来获取头像的值(如需增加更多变量,比如发帖者电话号码等,照着头像部分依葫芦画瓢即可);
最后,我们用wordpress自带函数get_the_post_thumbnail
来获取帖子的特色图像。
详解topics.php:
先看如何从服务器获取数据: 发帖者头像获取方法与forums.php里类似。帖子的特色图像需要用到get_the_post_thumbnail
和preg_match_all
这两个函数,对帖子内的图片进行获取并过滤。(preg_match_all
主要是为了应对网页版发帖者发布的多图文内容,在多图文内容中我们只需要取得帖子内容部分的第一张图片即可。)
再看如何向服务器发送数据: 我们看到用户发帖的时候,bbp_insert_topic
这个函数会生成一个新的帖子,于是就为变量new_topic_id
赋予了一个新的值,new_topic_id
其实是一个数组,它包含了很多值,比如帖子内容,贴子标题等,它还包含了一些bbpress为topic设置的meta_key
,在这里,我们用ACF插件为topic新增了用户头像这个自定义字段,所以,在帖子生成之后,我们需要在这里用ACF的update_field
函数把自定义字段的内容更新到new_topic_id
的数组里。
至此,bbPress API改造完毕。
安装JSON API插件
到后台激活JSON API的所有addon,并设置好JSON API的默认地址。
安装JSON API User插件
到后台激活这个addon,本步骤需要为controllers/User.php里面的类JSON_API_User_Controller
新增一个函数,新增函数名称可以定为wx_connect
,使得微信用户可以直接用微信账号发贴。 具体实现方法可以参考这个类下的fb_connect
函数,按照其方法进行改造。这里需要注意的是,我们还需要有一个后端文件getOpenid.php,用来获取微信用户的Openid,拿到用户的Openid之后,通过小程序前端页面回传到JSON API User,再用函数wx_connect
为发帖者授权注册wordpress账号,这样微信用户就无感地注册了wordpress账号,获取了bbpress发帖权限并可以在小程序里愉快地发帖了。
安装七牛的 PHP SDK
本步骤脱离wordpress,属于单独操作。安装这个SDK的目的是允许小程序用户在前端发帖子的时候可以上传图片到七牛云上,在前端将图片网址和bbpress里的content内容一结合,图文帖子就有了! 七牛的PHP SDK安装需要用到composer,军哥的LNMP 1.4自带就有,安装很简单,将SDK安装到常用的后端文件夹下面方便使用。
按照七牛的教程,注册一个bucket,拿到上传所需的accessKey和secretKey用于生成图片上传所需的Token,将获取Token的后端文件UploadToQiniu.php部署在服务器上,得到一个网址,把这个网址给前端开发人员就行了,前端会在小程序的js文件里调用这个网址获得图片上传到七牛云的授权。
为了让小程序能够上传图片到七牛云,我们还需要在小程序开发设置选项里将你在七牛云注册的bucket所属地区的上传服务器域名添加到小程序的upload业务域名里。注意,业务域名一个月之内只能改5次!
现在,总结一下后端的设置要点
- 用getOpenid.php来获取用户的Openid;
- 用
wx_connect
将微信用户的Openid与wordpress账号进行关联; - 用UploadToQiniu.php赋予小程序上传图片到七牛云的能力;
- 用bbPress API获得发帖对应版块的endpoint。
这四个步骤分别对应四个网址,将这四个网址提供给小程序开发的前端人员即可。