WordPress更新服务器

WordPress插件和主题的自定义更新API

从用户的角度来看,更新的工作方式与使用官方WordPress.org目录中列出的插件和主题一样。

Github: https://github.com/YahnisElsts/wp-update-server

本站下载:

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

特征

  • 提供插件和主题的更新。从用户的角度来看,更新的工作方式与使用官方WordPress.org目录中列出的插件和主题一样。
  • 易于设置。只需将脚本目录上载到服务器,然后在packages子目录中放置插件或主题ZIP 。现在,您可以在上使用有效的更新API http://yourserver.com/wp-update-server/?action=get_metadata&slug=your-plugin
  • 易于与现有插件和主题集成。它只需要大约5行代码。有关详细信息,请参见
  • WordPress更新服务器-Npcink
    WordPress更新服务器-Npcink

    插件更新检查器

  • 或者只是向下滚动到简短版本的“入门”部分。
  • 最低的服务器要求。服务器组件需要PHP 5.3+和Zip扩展。客户端库只需要PHP 5.2 - 相同的WordPress的当前版本。
  • 专为可扩展性而设计。要保护您的升级下载链接吗?还是使用自定义记录器或缓存?也许您的插件没有标准readme.txt,而是您希望从数据库中加载changelog和其他更新meta?通过扩展Wpup_UpdateServer类来创建自己的定制服务器。请参阅下面的示例。

入门

设置服务器

设置过程的这一部分对于插件和主题都是相同的。为了简洁起见,我将从插件的角度对其进行描述。

  1. wp-update-server目录上载到您的站点。您可以根据需要将其重命名为其他名称(例如updates)。
  2. 使cachelogs子目录可由PHP写入。
  3. 创建插件目录的Zip存档。档案名称必须与目录名称+“ .zip”相同。
  4. 将Zip文件复制到packages子目录。
  5. 通过/wp-update-server/?action=get_metadata&slug=plugin-directory-name在浏览器中访问来验证API是否有效。您应该看到一个JSON文档,其中包含有关插件的各种信息(名称,版本,说明等)。

提示:使用JSONView扩展名(Firefox, Chrome)在浏览器中漂亮地打印JSON。

创建Zip文件时,请确保插件文件位于目录内,而不位于存档根目录下。例如,假设您有一个名为“我的酷插件”的插件,并且该插件位于内部/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希望插件文件位于子目录中。

与插件集成

现在您已经准备好运行服务器,下一步是使您的插件查询它的更新。我们将使用plugin-update-checker库来实现。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

插件更新检查器

  1. 下载更新检查器。
  2. plugin-update-checker目录移动到插件的目录。
  3. 将以下代码添加到您的主插件文件中:要求 ' path / to / plugin-update-checker / plugin-update-checker.php ' ; $ MyUpdateChecker = Puc_v4_Factory :: buildUpdateChecker( ' http://example.com/wp-update-server/?action=get_metadata&slug=plugin-directory-name ',//元数据URL。__FILE__,//完整路径主要插件文件。“插件目录名” //插件塞通常是一样的目录的名称。);
  4. 准备发布更新时,只需如上所述压缩插件目录,然后将其packages放在服务器的子目录中即可(覆盖以前的版本)。

默认情况下,磁带库每天检查两次更新。如果更新检查器发现有新版本可用,它将在WordPress仪表板中显示更新通知,并且用户将能够通过单击“立即升级”链接进行安装。从用户的角度来看,它就像在WordPress.org上托管的插件一样。

请参阅更新检查器文档以获取详细的使用说明和更多示例。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

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

提示:readme.txt为插件创建文件。如果有的话,更新服务器将使用它来生成插件信息页面,当用户单击更新通知中的“查看版本xyz详细信息”链接时,该页面将显示。自述文件必须符合WordPress.org自述文件标准

注意:您的插件或主题必须处于活动状态才能进行更新。这样的结果是,在多站点安装中,仅当您的插件在主站点上处于活动状态时才会显示更新。这是因为只有在主站点上启用的插件才会加载到网络管理员中。作为参考,主站点是在“ 所有站点”列表中具有路径“ /”的站点

与主题整合

  1. 下载主题更新检查器库。
WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

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

  1. theme-updates目录放在您的目录includes或等效目录中。
  2. 将此代码段添加到您的functions.php
require 'path/to/theme-updates/theme-update-checker.php';
$MyThemeUpdateChecker = new ThemeUpdateChecker(
	'theme-directory-name', //Theme slug. Usually the same as the name of its directory.
	'http://example.com/wp-update-server/?action=get_metadata&slug=theme-directory-name' //Metadata URL.
);
  1. Details URI标头添加到您的style.cssDetails URI: http://example.com/my-theme-changelog.html该标题指定用户单击更新通知中的“查看版本xyz详细信息”链接后将看到的页面。将其设置为“版本zyz的新功能”页面或主题主页的URL。

与插件更新一样,主题更新检查器将每12小时向服务器查询主题详细信息,并在WordPress仪表板中显示更新通知(如果有可用的新版本)。

有关更多信息,请参见主题更新检查器文档。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

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

更新:该插件更新检查程序库现在还支持主题更新。旧的主题更新检查器不再有效维护。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

插件更新检查器

进阶主题

记录中

服务器将所有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的自己的服务器类,并编辑init脚本(即index.php如果您将服务器作为独立应用程序运行)以加载和使用新类。

例如,让我们做一个简单的修改,即禁用下载并从更新API返回的插件详细信息中删除下载URL。这可以用作需要授权才能下载更新的自定义服务器的基础。

将新文件添加MyCustomServer.phpwp-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插件运行它,使用自己的服务器类,等等。

要从您自己的应用程序运行服务器,您需要做三件事:

  1. 包括/wp-update-server/loader.php
  2. 创建的实例Wpup_UpdateServer或扩展它的类。
  3. 调用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/
*/

require_once __DIR__ . '/path/to/wp-update-server/loader.php';

class ExamplePlugin {
	protected $updateServer;

	public function __construct() {
		$this->updateServer = new MyCustomServer(home_url('/'));
		
		//The "action" and "slug" query parameters are often used by the WordPress core
		//or other plugins, so lets use different parameter names to avoid conflict.
		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_merge($_GET, array(
				'action' => get_query_var('update_action'),
				'slug'   => get_query_var('update_slug'),
			)));
		}
	}
}

class MyCustomServer extends Wpup_UpdateServer {
    protected function generateDownloadUrl(Wpup_Package $package) {
        $query = array(
            'update_action' => 'download',
            'update_slug' => $package->slug,
        );
        return self::addQueryArg($query, $this->serverUrl);
    }
}

$examplePlugin = new ExamplePlugin();

注意:如果您打算在实践中使用上述类似内容,则可能需要重写Wpup_UpdateServer::generateDownloadUrl()以自定义URL或更改查询参数。

保护下载链接

请参阅此博客文章,以获取高层次的概述和一些简短的示例。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

插件更新:保护下载链接

分析工具

您可以使用wp-update-server-stats工具来解析服务器日志并显示统计信息,例如活动安装的数量,活动版本等。

WordPress更新服务器-Npcink
WordPress更新服务器-Npcink

从wp-update-server日志收集统计信息

来源于: https://github.com/YahnisElsts/wp-update-server

怎么截取文章摘要内容和标题字数? - Wordpress开发

2018-10-28 19:33:24

Typecho

Akina - Typecho博客主题

2020-3-20 3:49:48

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