suth / update-server
WordPress 插件更新服务器
Requires
- michelf/php-markdown: ^1.6
This package is not auto-updated.
Last update: 2024-09-26 02:01:33 UTC
README
WordPress 插件和主题的定制更新 API 包。
基于 Yahnis Elsts 的 WP Update Server
功能
为插件和主题提供更新。
从用户的角度来看,更新工作就像在官方 WordPress.org 目录中列出的插件和主题一样。
易于集成到现有插件和主题。
只需要大约 5 行代码。有关详细信息,请参阅插件更新检查器和主题更新检查器文档,或者直接滚动到“入门”部分查看简短版本。
为扩展性而设计。
想要保护升级下载链接吗?或者使用自定义记录器或缓存?也许你的插件没有标准的readme.txt
,你更喜欢从数据库中加载变更日志和其他更新元数据?通过扩展Wpup_UpdateServer
类创建自己的自定义服务器。请参阅下面的示例。
入门
设置服务器
此设置过程的部分对于插件和主题都是相同的。为了简洁起见,我将从插件的角度来描述。
- 将
wp-update-server
目录上传到您的网站。如果您想,可以将其重命名为其他名称(例如updates
)。 - 使
cache
和logs
子目录可由PHP写入。 - 创建您插件目录的Zip存档。存档的名称必须与目录名称相同,并加上".zip"。
- 将Zip文件复制到
packages
子目录。 - 通过在浏览器中访问
/wp-update-server/?action=get_metadata&slug=plugin-directory-name
来验证API是否正常工作。您应该看到一个包含有关您的插件(名称、版本、描述等)各种信息的JSON文档。
提示:使用JSONView扩展(Firefox、Chrome)在浏览器中格式化打印JSON。
创建Zip文件时,请确保插件文件位于目录中,而不是存档根目录中。例如,假设您有一个名为"My Cool Plugin"的插件,它位于/wp-content/plugins/my-cool-plugin
中。ZIP文件应命名为my-cool-plugin.zip
,并且应包含以下内容
/my-cool-plugin
/css
/js
/another-directory
my-cool-plugin.php
readme.txt
...
如果您将所有内容放在根目录中,更新通知可能显示得很好,但当您尝试安装更新时,您会遇到一些难以解释的问题,因为WordPress期望插件文件位于子目录中。
与插件集成
有关详细使用说明和示例,请参阅更新检查器文档。
与主题集成
有关信息和示例,请参阅主题更新检查器文档。
高级主题
记录
服务器将所有API请求记录到/logs/request.log
文件中。每一行代表一个请求,格式如下
[timestamp] IP_address action slug installed_version wordpress_version site_url query_string
缺失或不适用的字段将用短横线 "-" 替换。日志记录器从 WordPress 添加到所有通过其 HTTP API 发送的请求的 "User-Agent" 标头中提取 WordPress 版本和网站 URL。如果您通过浏览器或如果标头被插件移除或覆盖(一些安全插件会这样做)发送 API 请求,则这些字段将不会存在。
扩展服务器
要自定义更新服务器的工作方式,创建一个扩展 Wpup_UpdateServer 的自定义服务器类,并编辑初始化脚本(如果您将服务器作为独立应用程序运行,则为 index.php
),以便加载和使用新类。
例如,让我们进行一个简单的修改,禁用下载并从更新 API 返回的插件详细信息中删除下载 URL。这可以作为需要授权才能下载更新的自定义服务器的基础。
将新文件 MyCustomServer.php
添加到 wp-update-server
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); } }
编辑 index.php
以使用新类
require __DIR__ . '/loader.php'; require __DIR__ . '/MyCustomServer.php'; $server = new MyCustomServer(); $server->handleRequest();
从另一个脚本运行服务器
虽然使用更新服务器最简单的方法是将其作为独立应用程序运行,但这并不是唯一的方法。如果需要,您还可以将其作为第三方库加载,并创建自己的服务器实例。这使您可以在将查询参数传递给服务器之前对其进行筛选和修改,从 WordPress 插件中运行它,使用您自己的服务器类等。
要从您的应用程序运行服务器,您需要做三件事
- 包含
/wp-update-server/loader.php
。 - 创建
Wpup_UpdateServer
的实例或扩展它的类。 - 调用
handleRequest($queryParams)
方法。
以下是一个基本示例插件,它从 WordPress 内部运行更新服务器
<?php /* Plugin Name: Plugin Update Server Description: An example plugin that runs the update API. Version: 1.0 Author: Yahnis Elsts Author URI: http://w-shadow.com/ */ class ExamplePlugin { protected $updateServer; public function __construct() { require_once __DIR__ . '/path/to/wp-update-server/loader.php'; $this->updateServer = new Wpup_UpdateServer(home_url('/')); add_filter('query_vars', array($this, 'addQueryVariables')); add_action('template_redirect', array($this, 'handleUpdateApiRequest')); } public function addQueryVariables($queryVariables) { $queryVariables = array_merge($queryVariables, array( 'update_action', 'update_slug', )); return $queryVariables; } public function handleUpdateApiRequest() { if ( get_query_var('update_action') ) { $this->updateServer->handleRequest(array( 'action' => get_query_var('update_action'), 'slug' => get_query_var('update_slug'), )); } } } $examplePlugin = new ExamplePlugin();
注意:如果您打算在实际中使用上述内容,您可能需要覆盖 Wpup_UpdateServer::generateDownloadUrl()
以使用您自己的 URL 结构或查询变量名称。
保护下载链接
请参阅 此博客文章 了解高级概述和一些简要示例。