今天朋友使用了一款 WordPress 主题,但是在使用的过程中出现了一些错误,经过我的调查后发现是主题自动更新出了毛病。修复了问题之后,觉得这个自动更新的实现颇有价值,写出来分享给大家,另外将这个错误出现的原因解释一下,引以为戒。
简介
ThemeUpdateChecker 是一个开源 PHP 库,遵守 GPL 许可,用于实现主题的升级提示和自动更新。使用这个支持库可以创造出和官方主题升级一样的效果,从而使开发者实现和官方升级相同的操作体验。
详情可以参看作者文章:Automatic Updates For Private And Commercial Themes
下载地址
库文件(需要 WordPress 3.2 及以上版本,测试至 4.2.2)
如何部署
1.将支持库文件 theme-update-checker.php 复制到主题根目录的 update 文件夹中,文件目录格式为 wp-content/themes/mytheme/update/theme-update-checker.php
2.打开主题的 funtions.php 文件,在 <?php 内添加如下代码
1 2 3 4 5 6 |
//检测主题更新 require_once(TEMPLATEPATH . '/update/theme-update-checker.php'); $mytheme_update_checker = new ThemeUpdateChecker( 'mytheme', //主题名字 'http://www.acgmiao.com/theme/info.json'//标识文件的访问地址 ); |
3.创建标识文件,按照提示填写内容,保存为 info.json ,样例如下
1 2 3 4 5 |
{ "version" : "1.1", //主题版本号 "details_url" : "http://www.acgmiao.com/theme/readme.html",//版本更新说明 "download_url" : "http://www.acgmiao.com/theme/mytheme_1.1.zip"//主题下载网址 } |
然后将 info.json 上传到你的网站目录中,文件必须保证能够公开访问。
到这里,自动更新程序已经添加好了。
推送更新
打开正在使用主题的 style.css 文件,头部会有主题信息如下
1 2 3 4 5 6 7 8 |
/* Theme Name : mytheme Theme URI : http://www.acgmiao.com Description : A WordPress theme by acgmiao Author : acgmiao Author URI : http://www.acgmiao.com Version : 1.0 */ |
程序是将主题的开发者留下的标识文件和主题样式 style.css 里面的版本号进行比对,如果主题开发者的 info.json 文件里面的版本号比使用者的主题文件 style.css 里面的版本号大,那么就会在 WordPress 后台的更新工具进行更新提醒,如果你选择更新,就自动在线安装主题。
所以我们只需要更新 info.json 中的相关信息,即可实现推送更新。
注意事项
在我为朋友博客 Debug 的过程中,我发现了一个问题,这个问题如果不处理好,会导致无法更新,或者不断重复提示更新/无限提示更新。
最最重要的一点就是保持主题名称的一致。在这个实例中,我们需要保持以下的主题名称必须一致,而且不能忽略大小写——
- style.css 中标识的主题名称
- 文件目录中主题所在文件夹的名称(这个很容易被忽略)
- functions.php 中引用库的代码中的名称
- info.json 中的主题名称
在这次我遇到的问题中,涉及到的主题是 Dimpurr 的作品 Clearision 主题,在默认安装主题之后默认的文件目录为 wp-content/themes/clearision ,使用的是小写的
clearision 但是实际上代码中全部都是 Clearision ,由于大小写不一样,无法正确获取当前主题的版本,才导致无限提示更新的错误。
尾巴
自动更新功能的引入可以给主题使用者更愉悦的体验,为用户免去了多次下载的麻烦。同时,自动更新功能可以通过引入开关机制,让用户选择是否启用,因为主题更新会全部覆盖主题文件,如果使用者在主题中进行了修改,都会被覆盖。
另外我推荐也引入 functions-diy.php 文件避免对用户修改的覆盖。 [xieyan]
路过~混个脸熟。
博客不错,嘎嘎!
我就是随便看看!
虚心学习!!
年中快乐!
看看您的博客!