私人和商业插件的自动更新

通过几步简单的操作,为你开发的Wordpress 主题和插件添加自动更新功能

远古以来,只在官方WordPress.org插件目录托管的插件都支持自动更新。现在,我已经编写了一个PHP库,您可以使用该库向任何插件添加自动更新功能。公共,私人和商业插件都一样–现在都可以享受自动更新通知和一键式升级的好处。

自定义更新检查器与WordPress已内置的升级系统紧密集成,可提供无缝的用户体验。观察:

私人和商业插件的自动更新-Npcink
私有托管插件的升级通知。
私人和商业插件的自动更新-Npcink
具有占位符数据的版本信息窗口

准备:

客户端库(需要WP 3.2或更高版本)

私人和商业插件的自动更新-Npcink
私人和商业插件的自动更新-Npcink

插件更新检查器

演示用插件

[zrz_file link="https://cdn.getimg.net/npc/2019/wordpress/plugin/external-update-example.zip" name="external-update-example.zip" code=""]

实例元数据文件:

{
    "name" : "External Update Example",
    "slug" : "external-update-example",
    "homepage" : "http://example.com/",
    "download_url" : "http://w-shadow.com/files/external-update-example/external-update-example.zip",
    
    "version" : "2.0",
    "requires" : "4.0",
    "tested" : "5.2",
    "last_updated" : "2019-05-26 10:57:00",
    "upgrade_notice" : "Here's why you should upgrade...",
    
    "author" : "Janis Elsts",
    "author_homepage" : "http://w-shadow.com/",
    
    "sections" : {
        "description" : "(Required) Plugin description. Basic HTML can be used in all sections.",
        "installation" : "(Recommended) Installation instructions.",
        "changelog" : "(Recommended) Changelog. <p>This section will be opened by default when the user clicks 'View version XYZ details'.</p>",
        "custom_section" : "This is a custom section labeled 'Custom Section'." 
    },
    
    "icons" : {
		"1x" : "http://w-shadow.com/files/external-update-example/assets/icon-128x128.png",
		"2x" : "http://w-shadow.com/files/external-update-example/assets/icon-256x256.png"
    },
    
    "banners" : {
		"low" : "http://w-shadow.com/files/external-update-example/assets/banner-772x250.png",
		"high" : "http://w-shadow.com/files/external-update-example/assets/banner-1544x500.png"
    },
    
    "rating" : 90,
    "num_ratings" : 123,
    "downloaded" : 1234,
    "active_installs" : 12345
}

Github: https://github.com/YahnisElsts/plugin-update-checker

快速入门指南

本节描述了使自动更新适用于您的插件的最快方法。这是您需要做的:为插件创建一个元数据文件,将其托管在公共可访问的位置,并告诉更新检查器在哪里可以找到它。

让我们从元数据开始。将下面的JSON代码复制到新文件中,并将占位符值替换为插件的信息。

{
"name" : "My Cool Plugin",
"slug" : "my-cool-plugin",
"download_url" : "http://example.com/plugins/my-cool-plugin.zip",
"version" : "2.0",
"author" : "John Smith",
"sections" : {
"description" : "Plugin description here. Basic HTML allowed."
}
}

(这是进行自动更新所需的最少数据量。在大多数情况下,您可能需要添加几个字段。有关完整列表,请参见元数据文档。)

大多数字段应该是不言自明的,除了一个可能的例外-“子弹”。WordPress希望所有支持自动更新的插件都有一个唯一的文本标识符,称为“ slug”。通常,子插件是由官方插件目录分配的。对于在其他地方托管的私人/商业插件,您必须加以弥补。如果不确定,请使用不带“ .php”扩展名的插件文件名(my-cool-plugin / my-cool-plugin.php成为my-cool-plugin)。

将您刚刚创建的元数据文件上传到Web服务器。确切地将文件放在何处或如何命名都无关紧要。重要的是,无论有人在何处安装您的插件,都可以访问其URL。

接下来,将“ plugin-update-checker”目录从客户端库存档复制到您的插件目录。然后启动您喜欢的代码编辑器,并将以下行添加到插件文件的顶部:

require 'plugin-update-checker/plugin-update-checker.php';
$MyUpdateChecker = PucFactory::buildUpdateChecker(
'http://example.com/path/to/metadata.json',
__FILE__,
'your-chosen-slug'
);

如果您按照我的建议使用插件的文件名作为子文件,则可以忽略PucFactory::buildUpdateChecker()调用的第三个参数。

提示:有时您会遇到另一个活动插件也在使用此更新检查器的情况。结果,可能会同时加载多个不同版本的库。上面的代码段将始终为您提供最新的可用版本。如果您的插件需要较旧的版本,并且与最新版本的API不兼容,则可能会出现问题。

要使用更新检查器的特定版本(例如,插件随附的版本),请PluginUpdateChecker_x_y直接实例化该类。用主要和次要版本号替换xy

//Use version 2.0 of the update checker.
require 'plugin-update-checker/plugin-update-checker.php';
$MyUpdateChecker = new PluginUpdateChecker_2_0 (
'http://example.com/path/to/metadata.json',
__FILE__,
'your-chosen-slug'
);

信不信由你。

PluginUpdateChecker类将处理其余部分。它将每12小时检查一次元数据文件,如果发现已发布了新版本,请在未记录的WP API中旋转正确的位,以使其在“插件”选项卡中显示为标准升级通知。假设您提供了有效的download_url,用户只需单击一下即可安装更新。

提示:为更新创建ZIP文件时,请将所有插件文件放在目录中。目录名称应与插件slug相匹配。请勿将文件放在ZIP归档文件的根目录中-当有人绑定安装更新时,它可能会引起细微的错误和错误。

本文的其余部分将专门讨论更新检查器类和元数据格式。

PluginUpdateChecker类

此类是更新检查器的核心。这也是更新程序的唯一部分,除非您决定自己扩展该库,否则它应该处理。

类构造器

应该通过将所有配置设置传递给PucFactory :: buildUpdateChecker()工厂方法或直接传递给PluginUpdateChecker构造函数来指定所有配置设置。两者都采用以下参数:

  • $metadataUrl –插件的元数据文件的完整URL。
  • $pluginFile–插件文件的路径。在大多数情况下,您可以在此处简单地使用__FILE__常量。
  • $slug–插件的“ slug”。如果未指定,则$ pluginFile的文件名部分(无“ .php”)将用作子文件。
  • $checkPeriod–检查更新的频率(以小时为单位)。默认为每12小时检查一次。设置为零以禁用自动更新检查。
  • $optionName–在何处存储有关更新的簿记信息。默认为“ external_updates- $ slug”。

检查更新()

手动触发更新检查。当您通过将$ checkPeriod(上方)设置为零来禁用自动检查时,此功能特别有用。此方法不带参数,不返回任何值。

addQueryArgFilter($ callback)

注册用于过滤查询参数的回调。每当更新检查器需要检索元数据文件时,它将首先运行每个过滤器回调,并将返回的查询参数附加到元数据URL。这使您可以将任意数据传递到承载元数据的服务器。例如,商业插件可以使用它来实现某种授权方案,其中只有具有正确“密钥”的用户才能获得自动更新。

回调函数将通过查询参数的关联数组传递,并应返回修改后的数组。默认情况下,更新检查器会将以下参数添加到元数据URL:

  • installed_version –设置为当前安装的插件版本。
  • checking_for_updates –如果检查更新,则设置为1,否则不设置(即,在为“插件信息”框加载数据时)。

此方法采用一个参数–回调函数。

addHttpRequestArgFilter($ callback)

注册一个回调,以过滤传递给内置帮助器函数wp_remote_get的各种选项,更新检查器使用该函数定期下载插件元数据。回调函数应采用一个参数-关联的参数数组-并返回修改后的数组。有关可用的参数及其工作方式的详细信息,请参见wp_remote_get上的WP文档。

此方法采用一个参数–回调函数。

addResultFilter($ callback)

注册一个回调以过滤从元数据URL检索到的插件信息。

回调函数应带有两个参数。如果成功检索了元数据,则传递的第一个参数将是PluginInfo的实例(有关此类的说明,请参阅源代码)。否则,它将为NULL。第二个参数是wp_remote_get的相应返回值(有关详细信息,请参阅WP文档)。回调函数应返回一个新的或修改的PluginInfo实例或NULL。

此方法采用一个参数–回调函数。

元数据格式

自动更新系统使用基于JSON的文件格式来描述插件。本质上,整个文件是一个大的JSON编码对象(AKA哈希表或关联数组)。每个字段(或数组键)代表有关插件最新版本的一条信息。这里是所有可用字段的完整说明。

为了简单起见,常规元数据和与更新相关的信息都存储在同一文件中。如果不希望这样做,则可以使用脚本替换纯JSON文件,该脚本检查“ checking_for_updates”查询参数的存在,如果将其设置为“ 1”,则仅发出与更新相关的字段。

笔记

您的插件必须处于活动状态,更新才能正常工作。更新检查器只是由您的插件加载并运行的另一段PHP代码,如果插件处于非活动状态,则不会运行更新检查器。

可能不会立即显而易见的结果是,在多站点安装中,仅当插件在主站点上处于活动状态时才会显示更新。这是因为更新通知通常会显示在网络管理员中,并且在这种情况下,只会加载主站点上活动的插件。WordPress网络的主要站点是第一个创建的站点,并且在“ 站点->所有站点”列表中具有路径“ /” 。

来源于: https://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/

WP开发

Wordpress更新服务器

2019-11-6 7:08:37

WP开发

插件更新检查器

2019-11-6 11:53:48

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 link@baimu.org 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索