matthiasweb / wordpress-plugin-updater
一个用于WordPress插件的库,利用WordPress许可证服务器进行许可证验证和自动更新。
README
WordPress许可证服务器的WordPress插件集成。
前言
这是一个从Capevace/wordpress-plugin-updater的原始代码分叉的仓库。这个分叉的仓库也发布到了packagist,因此可以通过composer进行安装。请注意,npm脚本npm run replace
会将原始的smoolabs
/Capevace
命名空间替换为MatthiasWeb
以避免命名空间冲突。感谢Capevace(原始作者),这个仓库只是添加了一些修改以满足MatthiasWeb插件的需求。
使用方法
您有两种方法可以集成此功能并为您自己的插件启用自动更新。
使用Composer
如果您已经在使用Composer,您就知道该怎么做。
如果没有,您需要在您的计算机上安装Composer并运行composer init
。这将初始化Composer到您的包根目录。
完成之后,运行这个
composer require matthiasweb/wordpress-plugin-updater:dev-master
Composer会然后安装集成到vendor/
文件夹。
现在要包含插件文件,只需包含vendor/autoload.php
文件。
<?php require_once 'vendor/autoload.php';
不使用Composer
将此仓库作为.zip文件下载,并将其解压缩到您的插件文件中。然后只需包含loader.php
文件。
<?php require_once '/path/to/updater/loader.php';
设置
您只需做一件事,在将集成包含到您的项目后启用它。
在您的插件主文件中,粘贴此代码
$client = \MatthiasWeb\WPU\V4\WPLSController::initClient('http://url-to-wpls.com', array( 'name' => 'Example Plugin Name', 'version' => '1.0.0', 'path' => __FILE__, 'slug' => 'example-plugin-slug' ));
现在,将示例插件名称替换为您的插件名称,将http://update-server-url.com替换为您托管更新服务器的主机URL,将my-example-plugin替换为您插件的缩略名(例如插件文件夹的名称),将1.0.0替换为您当前插件的版本。
这就完成了!插件现在将在您在服务器上提供更新后自动接收更新(当然,只有当用户提供许可证时)!
在输入许可证之前禁用功能
您可能希望阻止您的购买者在输入许可证之前使用您的插件。您可以轻松地禁用此类功能
// Your Updater instance $client = \MatthiasWeb\...; if ($client->isActivated()) { /* * The User has activated the plugin. * Add your plugin functionality here. */ } else { /* * The User has *NOT* activated the plugin. * Add activation messages etc here, for example on your plugin settings page. */ }
请确保这符合Envato关于在许可证后面锁定功能的规则!否则,插件可能不会被接受。
启用通讯录功能
您可以创建一个额外的输入框,让用户输入电子邮件地址。还有一个复选框,用户可以选择是否接收通讯录。
$client = \MatthiasWeb\WPU\V4\WPLSController::initClient('http://url-to-wpls.com', array( // [...] 'slug' => 'example-plugin-slug', 'newsletterPrivacy' => 'https://matthias-web.com/privacypolicy/' // [...] ));
您必须添加配置参数newsletterPrivacy
并带有您隐私页面的链接。如果用户同意,则会触发以下操作
// do_action('wpls_email_' . $client->config->slug, $email); // Your slug add_action('wpls_email_example-plugin-slug', function($email) { // Do some POSTs });