Npcink Blog
切换菜单

插件更新检查器

给 Wordpress 增添更新功能

本页目录3 节

WordPress 插件的自定义更新检查器。如果您不想将项目托管在正式的 WP 存储库中,但仍然希望它支持自动更新,则很有用。尽管名称,它也适用于主题。

GitHub: https://GitHub.com/YahnisElsts/plugin-update-checker

插件更新检查器

这是针对 WordPress 插件和主题的自定义更新检查器库。它使您可以将自动更新通知和一键式升级添加到商业插件,私有主题等。您需要做的就是将插件/主题详细信息放在 JSON 文件中,将文件放在服务器上,然后将 URL 传递给库。该库会定期检查 URL,以查看是否有可用的新版本,并在必要时向用户显示更新通知。

从用户的角度来看,它就像在 WordPress.org 上托管的插件和主题一样工作。更新检查器使用大多数 WordPress 用户熟悉的默认升级 UI。

  • GitHub 整合
  • BitBucket 集成
  • GitLab 集成

入门

自托管插件和主题

  1. 下载最新版本并将plugin-update-checker目录复制到您的插件或主题。
  2. 转到examples子目录,然后打开适合您的项目类型的.json 文件。用您的插件/主题详细信息替换占位符数据。
    • 插件示例:
{
"name" : "Plugin Name",
"version" : "2.0",
"download_url" : "http://example.com/plugin-name-2.0.zip",
"sections" : {
"description" : "Plugin description here. You can use HTML."
}
}
  • 这是一个最小的示例,其中省略了可选字段。有关受支持字段及其说明的完整列表,请参见此表。
  • 主题示例:
{
"version": "2.0",
"details_url": "http://example.com/version-2.0-details.html",
"download_url": "http://example.com/example-theme-2.0.zip"
}
  • 这实际上是一个完整的示例,其中显示了所有与主题相关的字段。version并且download_url应该是不言自明的。该details_url键指定页面,用户将看到,如果他们点击“查看版本 1.2.3 的详细信息”链接的更新通知。
require 'path/to/plugin-update-checker/plugin-update-checker.php';
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
'http://example.com/path/to/details.json',
__FILE__, //Full path to the main plugin file or functions.php.
'unique-plugin-or-theme-slug'
);
  1. 注意:如果您使用的是 Composer 自动加载器,则不需要显式require的库。
如何发布更新

更改 versionJSON 文件中的数字,并确保其download_url指向最新版本。如有必要,请更新其他字段。提示:您可以使用 wp-update-server 自动执行此过程。

默认情况下,库将每 12 小时检查一次指定的 URL 是否有更改。您可以通过单击“插件”页面上的“检查更新”链接(位于“访问插件站点”链接旁边)来强制其立即进行检查。主题没有该链接,但是您也可以像这样触发更新检查:

  1. 安装调试栏。
  2. 点击管理栏(又称工具栏)中的“调试”菜单。
  3. 打开“ PUC(您的子弹)”面板。
  4. 点击“立即检查”按钮。
笔记
  • 传递给第二个参数buildUpdateChecker必须是主插件文件或主题目录中任何文件的绝对路径。如果遵循“入门”说明,则可以只使用__FILE__常量。
  • 第三个参数(即段塞)是可选的,但建议使用。在大多数情况下,该段应该与您的插件目录的名称相同。例如,如果您的插件位于其中/wp-content/plugins/my-plugin,请将 slug 设置为my-plugin。如果忽略该段,更新检查器将使用主插件文件的名称作为段(例如my-cool-plugin.php→ my-cool-plugin)。如果您的插件的通用文件名为,则可能导致冲突plugin.php。这不会影响主题,因为 PUC 使用主题目录名称作为默认标记。但是,如果您打算在自己的代码中使用该段代码(例如,过滤更新或覆盖更新检查器行为),则最好进行显式设置。

许可证管理

当前,更新检查器没有任何内置的许可证管理功能。它仅提供了一些挂钩,您可以使用这些挂钩,例如,添加许可证密钥以更新请求($updateChecker->addQueryArgFilter())。如果您正在寻找管理和验证许可证的方法,请在此问题中发表您的反馈。

GitHub 整合

  1. 下载最新版本并将plugin-update-checker目录复制到您的插件或主题。
  2. 将以下代码添加到主插件文件或functions.php:
require 'plugin-update-checker/plugin-update-checker.php';
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
'https://github.com/user-name/repo-name/',
__FILE__,
'unique-plugin-or-theme-slug'
);
//Optional: If you're using a private repository, specify the access token like this:
$myUpdateChecker->setAuthentication('your-token-here');
//Optional: Set the branch that contains the stable release.
$myUpdateChecker->setBranch('stable-branch-name');
  1. 仅插件:将readme.txt根据 WordPress.org 插件自述文件标准格式化的文件添加到您的存储库。当用户单击“查看版本 1.2.3 详细信息”链接时,将显示此文件的内容。
如何发布更新

该库支持几种不同的方法来在 GitHub 上发布更新。选择最适合您的工作流程的一种。

  • GitHub 版本使用 GitHub 上的“发布”功能创建新版本。标签名称和发行标题无关紧要。该描述是可选的,但如果您提供了描述,则当用户单击“插件”页面上的“查看版本 xyz 详细信息”链接时,将显示该描述。请注意,PUC 会忽略标记为“这是预发行版本”的发行版本。如果要使用发布资产,请enableReleaseAssets()在创建更新检查器实例后调用该方法:
$myUpdateChecker->getVcsApi()->enableReleaseAssets();
  • 标签要发布 1.2.3 版,请创建一个名为v1.2.3或的新 Git 标签1.2.3。而已。PUC 不需要严格遵守 SemVer。这些都是有效的标签名称:v1.2.3,v1.2-foo,1.2.3_rc1-ABC,1.2.3.4.5。但是,请注意,它不足以过滤掉 alpha / beta / RC 版本。如果这是一个问题,你可能需要使用 GitHub 的版本或分支代替。
  • 稳定的分支将更新检查器指向稳定的生产就绪分支:
$updateChecker->setBranch('branch-name');
  • PUC 将定期检查Version主插件文件中的标头,或者style.css如果它大于已安装的版本,则显示通知。注意:如果将分支设置为master(默认值),更新检查器将首先查找最新版本和标签。master如果找不到其他合适的分支,它将仅使用分支。
笔记

该库将从发布/标签/分支的以下部分提取更新详细信息:

  • 版本号
    • “版本”插件标头。
    • 最新的 GitHub 版本或标签名称。
  • 变更日志
    • 的“更改日志”部分readme.txt。
    • 以下文件之一:CHANGES.md,CHANGELOG.md,changes.md,changelog.md
    • GitHub 发行说明。
  • 必需和经过测试的 WordPress 版本
    • 中的“至少需要”和“经过测试”字段readme.txt。
    • 以下插件头: Required WP,Tested WP,Requires at least,Tested up to
  • “最新更新”时间戳
    • 最新 GitHub 版本的创建时间戳。
    • 所选标签或分支中的最新提交。
  • 下载次数
    • download_count最新版本的统计信息。
    • 如果您不使用 GitHub 版本,则不会有下载统计信息。
  • 其他插件详细信息-作者,首页 URL,描述
    • 的“说明”部分readme.txt。
    • 远程插件头(即 GitHub 上的最新版本)。
    • 本地插件头(即当前安装的版本)。
  • 评分,横幅,屏幕截图
    • 不支持。