一行代码即可自建 WordPress 主题更新系统
之前就介绍过 WordPress 6.1 新增 "Update URI" 主题标头,第三方主题可以自建更新系统,这个具体的技术细节分成两点:
首先 WordPress 只要判断主题有设置 "Update URI" 标头值,并且值不是官方主题库的地址,WordPress 就不会去官方的主题库更新该主题。
然后第三方主题开发者使用 update_themes_{$hostname}
filter 来为特定的主机名下的主题提供更新服务。
那么具体怎么实现呢?从上面两点是需要一些略显复杂的编程过程,那么能不能简单一些呢?可以的,只要你已经安装了 WPJAM Basic 和 WPJAM 「内容模板」插件,那么只需一行代码即可自建 WordPress 主题更新系统。
下面我们一步一步介绍怎么实现:
设置主题 "Update URI" 的标头
首先由上可知,要能够定义自己开发的主题的更新行为,首先在要在主题添加 "Update URI" 主题标头,打开主题的 style.css
文件:
/*
Theme Name: SWEET
Theme URI: http://www.xintheme.com
Description: Sweet主题,适用于个人博客,Powered by:<a href="http://www.xintheme.com">XinTheme</a> + <a href="https://blog.wpjam.com/">WordPress 果酱</a>
Version: 6.2
Author: 大胡子 & Denis
Author URI: http://www.xintheme.com
Update URI: https://wpjam.com/project/sweet/
*/
如上所示,倒数第二行:Update URI: https://wpjam.com/project/sweet/
就是要添加的,这个地址是我的演示,到时候注意改成自己的主机名和地址。
这样设置之后,WordPress 就不会去 WordPress 官方的主题库更新该主题,那么它会去那里更新主题呢?WordPress 需要我们告诉它,首先我们需要一个地方用于存储我们主题版本信息。
使用表格模板维护主题版本信息
我们是使用 WPJAM 「内容模板」插件的表格模板来维护主题版本信息,安装好了内容模板之后,新建一个表格模板,如下所示的「WordPress 主题版本管理」:
这里要记住一下这个表格模板的 ID,比如我的是 8917,后面要用到。
然后这个表格模板需要下面这些字段,别担心,不需要去记,我到时候会把我的模板导出,你们导入即可:
名称字段就是主题的名字,主题字段是主题文件夹名字(注意大小写),其他字段上面的意思都很好理解,就不再解释了,这样我们就开始管理这个表格了:
再次重复一下,你无需自己创建这个字段,我会使用上图中的导出功能,导出该表格模板。
然后我们创建一个主题的版本信息,点击上图中的「新建」按钮:
这样我们就完成了自己开发的主题版本信息的维护系统,然后我们要把版本信息告诉 WordPress 用于和现有主题比较,还记得创建模板的时候,我让你们记住的 ID 吗?我的是 8917,下一步我们要用到。
注册主题的自建更新系统
我们使用内容模板的表格模板创建了一个用于维护主题版本信息的模板,然后 ID 是 8917,我们用这个 ID 通过内容模板的数据接口获取主题版本信息:https://博客地址/api/template/get.json?id=8917
,注意用的时候把 8917 改成你自己创建的模板 ID。
然后 WPJAM Basic 提供了一个注册函数,让大家只需一行代码就可以让 WordPress 知道使用表格模板创建的主题版本信息去比对当前的主题信息,然后在提示主题是否有更新:
wpjam_register_theme_updater('wpjam.com', 'https://博客地址/api/template/get.json?id=8917');
wpjam_register_theme_updater
就是 WPJAM Basic 提供的自建主题更新系统的注册函数,它有两个参数:
第一个是在上面第一步中设置的主题 "Update URI" 的标头域名的主机名,上面我们定义主题的 "Update URI" 的标头是 https://wpjam.com/project/sweet/
,它的主机名是 wpjam.com
,所以他就是第一个参数的值,这里根据你开发的主题设置的 "Update URI" 的标头域名的主机名修改。
第二参数是获取该主机名下主题的更新信息的 API 地址,我们这里使用表格模板提供的 API 地址。
这样我们通过一行代码就实现了自建 WordPress 主题更新系统,但是这个需要当前主题所在的站点激活了 WPJAM Basic 插件,为了兼容,可以加入 WPJAM Basic 已经激活判读的代码,这样激活了 WPJAM Basic 就能获取更新,不激活也不影响主题使用:
add_action('wpjam_loaded', function(){
wpjam_register_theme_updater('wpjam.com', 'https://博客地址/api/template/get.json?id=8917');
});
查看主题更新效果
执行了上面这些操作之后,如果主题有更新,还是以 Sweet 主题为例,如果主题有更新,只需要在上面创建的表格模板中把版本号更新了即可,然后在主题列表页就会显示该主题有更新:
点击详情,可以看到更加具体更新信息:
在「仪表盘」的「更新」子菜单下也可以看到更新信息:
这样自建主题更新系统就完成了,为了方便大家操作,我提供了我已经创建的「主题信息」的表格模板导出文件,大家导入即可,然后获取 ID,就可以添加自己主题的更新系统了。
https://pan.quark.cn/s/6aaaa33864f2
然后 WPJAM「内容模板」插件可以在「WordPress 果酱」知识星球获取: