WP Update Server 使用教程
项目介绍
WP Update Server 是一个自定义的 WordPress 插件和主题更新 API,旨在与 Yahnis Elsts 的 plugin-update-checker 库结合使用。该项目允许开发者为未托管在 WordPress.org 上的插件和主题提供更新,或者为与 WordPress 完全无关的通用包提供更新。通过 WP Update Server,开发者可以控制更新过程并使用许可证参数来保护下载链接。
项目快速启动
安装
首先,克隆项目仓库到本地:
git clone https://github.com/YahnisElsts/wp-update-server.git
配置
编辑 index.php
文件以使用新的自定义服务器类:
require __DIR__ . '/loader.php';
require __DIR__ . '/MyCustomServer.php';
$server = new MyCustomServer();
$server->handleRequest();
运行服务器
你可以将服务器作为独立应用程序运行,也可以将其作为第三方库加载并创建自己的服务器实例。以下是如何从自己的应用程序运行服务器的步骤:
- 包含
/wp-update-server/loader.php
- 创建一个
Wpup_UpdateServer
实例或扩展它的类 - 调用
handleRequest($queryParams)
方法
示例代码:
require_once __DIR__ . '/path/to/wp-update-server/loader.php';
class ExamplePlugin {
protected $updateServer;
public function __construct() {
$this->updateServer = new MyCustomServer(home_url('/'));
add_filter('query_vars', array($this, 'addQueryVariables'));
add_action('template_redirect', array($this, 'handleUpdateApiRequest'));
}
public function addQueryVariables($queryVariables) {
$queryVariables[] = 'update_action';
$queryVariables[] = 'update_slug';
return $queryVariables;
}
public function handleUpdateApiRequest() {
if (get_query_var('update_action')) {
$this->updateServer->handleRequest($_GET);
exit;
}
}
}
$examplePlugin = new ExamplePlugin();
应用案例和最佳实践
自定义服务器类
你可以创建自己的服务器类,该类扩展 Wpup_UpdateServer
,并编辑初始脚本(如果是独立应用程序,则为 index.php
)以加载和使用新类。例如,以下是一个简单的修改,禁用下载并从插件详细信息中删除下载 URL:
class MyCustomServer extends Wpup_UpdateServer {
protected function filterMetadata($meta, $request) {
$meta = parent::filterMetadata($meta, $request);
unset($meta['download_url']);
return $meta;
}
protected function actionDownload(Wpup_Request $request) {
$this->exitWithError('Downloads are disabled', 403);
}
}
安全性和许可证控制
通过自定义服务器类,你可以实现更复杂的安全性和许可证控制逻辑,例如要求授权才能下载更新。
典型生态项目
Plugin Update Checker
Plugin Update Checker 是一个与 WP Update Server 配合使用的库,它允许 WordPress 插件和主题检查更新并从自定义更新服务器下载更新。
WP Update Server Stats
WP Update Server Stats 是一个工具,用于解析服务器日志并显示统计信息,如活跃安装数量、活跃版本等。
通过这些工具和库,开发者可以构建一个完整的更新管理系统,确保插件和主题的安全性和最新性。