從用戶的角度來看,更新的工作方式與使用官方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行代碼。有關詳細信息,請參見
- 或者只是向下滾動到簡短版本的“入門”部分。
- 最低的服務器要求。服務器組件需要PHP 5.3+和Zip擴展??蛻舳藥熘恍枰狿HP 5.2 - 相同的WordPress的當前版本。
- 專為可擴展性而設計。要保護您的升級下載鏈接嗎?還是使用自定義記錄器或緩存?也許您的插件沒有標準
readme.txt
,而是您希望從數據庫中加載changelog和其他更新meta?通過擴展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文件時,請確保插件文件位于目錄內,而不位于存檔根目錄下。例如,假設您有一個名為“我的酷插件”的插件,并且該插件位于內部/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庫來實現。
- 下載更新檢查器。
- 將
plugin-update-checker
目錄移動到插件的目錄。 - 將以下代碼添加到您的主插件文件中:要求 ' 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__,//完整路徑主要插件文件?!安寮夸浢?//插件塞通常是一樣的目錄的名稱。);
- 準備發布更新時,只需如上所述壓縮插件目錄,然后將其
packages
放在服務器的子目錄中即可(覆蓋以前的版本)。
默認情況下,磁帶庫每天檢查兩次更新。如果更新檢查器發現有新版本可用,它將在WordPress儀表板中顯示更新通知,并且用戶將能夠通過單擊“立即升級”鏈接進行安裝。從用戶的角度來看,它就像在WordPress.org上托管的插件一樣。
請參閱更新檢查器文檔以獲取詳細的使用說明和更多示例。
提示:readme.txt
為插件創建文件。如果有的話,更新服務器將使用它來生成插件信息頁面,當用戶單擊更新通知中的“查看版本xyz詳細信息”鏈接時,該頁面將顯示。自述文件必須符合WordPress.org自述文件標準。
注意:您的插件或主題必須處于活動狀態才能進行更新。這樣的結果是,在多站點安裝中,僅當您的插件在主站點上處于活動狀態時才會顯示更新。這是因為只有在主站點上啟用的插件才會加載到網絡管理員中。作為參考,主站點是在“?所有站點”列表中具有路徑“ /”的站點。
與主題整合
- 下載主題更新檢查器庫。
- 將
theme-updates
目錄放在您的目錄includes
或等效目錄中。 - 將此代碼段添加到您的
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.
);
- 將
Details URI
標頭添加到您的style.css
:Details URI: http://example.com/my-theme-changelog.html
該標題指定用戶單擊更新通知中的“查看版本xyz詳細信息”鏈接后將看到的頁面。將其設置為“版本zyz的新功能”頁面或主題主頁的URL。
與插件更新一樣,主題更新檢查器將每12小時向服務器查詢主題詳細信息,并在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的自己的服務器類,并編輯init腳本(即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/
*/
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或更改查詢參數。
保護下載鏈接
請參閱此博客文章,以獲取高層次的概述和一些簡短的示例。
分析工具
您可以使用wp-update-server-stats工具來解析服務器日志并顯示統計信息,例如活動安裝的數量,活動版本等。