私人和商業(yè)插件的自動(dòng)更新

    通過幾步簡(jiǎn)單的操作,為你開發(fā)的Wordpress 主題和插件添加自動(dòng)更新功能

    遠(yuǎn)古以來,只在官方WordPress.org插件目錄托管的插件都支持自動(dòng)更新。現(xiàn)在,我已經(jīng)編寫了一個(gè)PHP庫,您可以使用該庫向任何插件添加自動(dòng)更新功能。公共,私人和商業(yè)插件都一樣–現(xiàn)在都可以享受自動(dòng)更新通知和一鍵式升級(jí)的好處。

    自定義更新檢查器與WordPress已內(nèi)置的升級(jí)系統(tǒng)緊密集成,可提供無縫的用戶體驗(yàn)。觀察:

    私人和商業(yè)插件的自動(dòng)更新
    私有托管插件的升級(jí)通知。
    私人和商業(yè)插件的自動(dòng)更新
    具有占位符數(shù)據(jù)的版本信息窗口

    準(zhǔn)備:

    客戶端庫(需要WP 3.2或更高版本)

    插件更新檢查器

    演示用插件

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

    實(shí)例元數(shù)據(jù)文件:

    {
        "name" : "External Update Example",
        "slug" : "external-update-example",
        "homepage" : "http://example.com/",
        "download_url" : "http://w-shadow.com/files/external-update-example/external-update-example.zip",
        
        "version" : "2.0",
        "requires" : "4.0",
        "tested" : "5.2",
        "last_updated" : "2019-05-26 10:57:00",
        "upgrade_notice" : "Here's why you should upgrade...",
        
        "author" : "Janis Elsts",
        "author_homepage" : "http://w-shadow.com/",
        
        "sections" : {
            "description" : "(Required) Plugin description. Basic HTML can be used in all sections.",
            "installation" : "(Recommended) Installation instructions.",
            "changelog" : "(Recommended) Changelog. <p>This section will be opened by default when the user clicks 'View version XYZ details'.</p>",
            "custom_section" : "This is a custom section labeled 'Custom Section'." 
        },
        
        "icons" : {
    		"1x" : "http://w-shadow.com/files/external-update-example/assets/icon-128x128.png",
    		"2x" : "http://w-shadow.com/files/external-update-example/assets/icon-256x256.png"
        },
        
        "banners" : {
    		"low" : "http://w-shadow.com/files/external-update-example/assets/banner-772x250.png",
    		"high" : "http://w-shadow.com/files/external-update-example/assets/banner-1544x500.png"
        },
        
        "rating" : 90,
        "num_ratings" : 123,
        "downloaded" : 1234,
        "active_installs" : 12345
    }

    Github: https://github.com/YahnisElsts/plugin-update-checker

    快速入門指南

    本節(jié)描述了使自動(dòng)更新適用于您的插件的最快方法。這是您需要做的:為插件創(chuàng)建一個(gè)元數(shù)據(jù)文件,將其托管在公共可訪問的位置,并告訴更新檢查器在哪里可以找到它。

    讓我們從元數(shù)據(jù)開始。將下面的JSON代碼復(fù)制到新文件中,并將占位符值替換為插件的信息。

    {
    "name" : "My Cool Plugin",
    "slug" : "my-cool-plugin",
    "download_url" : "http://example.com/plugins/my-cool-plugin.zip",
    "version" : "2.0",
    "author" : "John Smith",
    "sections" : {
    "description" : "Plugin description here. Basic HTML allowed."
    }
    }

    (這是進(jìn)行自動(dòng)更新所需的最少數(shù)據(jù)量。在大多數(shù)情況下,您可能需要添加幾個(gè)字段。有關(guān)完整列表,請(qǐng)參見元數(shù)據(jù)文檔。)

    大多數(shù)字段應(yīng)該是不言自明的,除了一個(gè)可能的例外-“子彈”。WordPress希望所有支持自動(dòng)更新的插件都有一個(gè)唯一的文本標(biāo)識(shí)符,稱為“ slug”。通常,子插件是由官方插件目錄分配的。對(duì)于在其他地方托管的私人/商業(yè)插件,您必須加以彌補(bǔ)。如果不確定,請(qǐng)使用不帶“ .php”擴(kuò)展名的插件文件名(my-cool-plugin / my-cool-plugin.php成為my-cool-plugin)。

    將您剛剛創(chuàng)建的元數(shù)據(jù)文件上傳到Web服務(wù)器。確切地將文件放在何處或如何命名都無關(guān)緊要。重要的是,無論有人在何處安裝您的插件,都可以訪問其URL。

    接下來,將“ plugin-update-checker”目錄從客戶端庫存檔復(fù)制到您的插件目錄。然后啟動(dòng)您喜歡的代碼編輯器,并將以下行添加到插件文件的頂部:

    require 'plugin-update-checker/plugin-update-checker.php';
    $MyUpdateChecker = PucFactory::buildUpdateChecker(
    'http://example.com/path/to/metadata.json',
    __FILE__,
    'your-chosen-slug'
    );

    如果您按照我的建議使用插件的文件名作為子文件,則可以忽略PucFactory::buildUpdateChecker()調(diào)用的第三個(gè)參數(shù)。

    提示:有時(shí)您會(huì)遇到另一個(gè)活動(dòng)插件也在使用此更新檢查器的情況。結(jié)果,可能會(huì)同時(shí)加載多個(gè)不同版本的庫。上面的代碼段將始終為您提供最新的可用版本。如果您的插件需要較舊的版本,并且與最新版本的API不兼容,則可能會(huì)出現(xiàn)問題。

    要使用更新檢查器的特定版本(例如,插件隨附的版本),請(qǐng)PluginUpdateChecker_x_y直接實(shí)例化該類。用主要和次要版本號(hào)替換xy

    //Use version 2.0 of the update checker.
    require 'plugin-update-checker/plugin-update-checker.php';
    $MyUpdateChecker = new PluginUpdateChecker_2_0 (
    'http://example.com/path/to/metadata.json',
    __FILE__,
    'your-chosen-slug'
    );

    信不信由你。

    PluginUpdateChecker類將處理其余部分。它將每12小時(shí)檢查一次元數(shù)據(jù)文件,如果發(fā)現(xiàn)已發(fā)布了新版本,請(qǐng)?jiān)谖从涗浀腤P API中旋轉(zhuǎn)正確的位,以使其在“插件”選項(xiàng)卡中顯示為標(biāo)準(zhǔn)升級(jí)通知。假設(shè)您提供了有效的download_url,用戶只需單擊一下即可安裝更新。

    提示:為更新創(chuàng)建ZIP文件時(shí),請(qǐng)將所有插件文件放在目錄中。目錄名稱應(yīng)與插件slug相匹配。請(qǐng)勿將文件放在ZIP歸檔文件的根目錄中-當(dāng)有人綁定安裝更新時(shí),它可能會(huì)引起細(xì)微的錯(cuò)誤和錯(cuò)誤。

    本文的其余部分將專門討論更新檢查器類和元數(shù)據(jù)格式。

    PluginUpdateChecker類

    此類是更新檢查器的核心。這也是更新程序的唯一部分,除非您決定自己擴(kuò)展該庫,否則它應(yīng)該處理。

    類構(gòu)造器

    應(yīng)該通過將所有配置設(shè)置傳遞給PucFactory :: buildUpdateChecker()工廠方法或直接傳遞給PluginUpdateChecker構(gòu)造函數(shù)來指定所有配置設(shè)置。兩者都采用以下參數(shù):

    • $metadataUrl?–插件的元數(shù)據(jù)文件的完整URL。
    • $pluginFile–插件文件的路徑。在大多數(shù)情況下,您可以在此處簡(jiǎn)單地使用__FILE__常量。
    • $slug–插件的“ slug”。如果未指定,則$ pluginFile的文件名部分(無“ .php”)將用作子文件。
    • $checkPeriod–檢查更新的頻率(以小時(shí)為單位)。默認(rèn)為每12小時(shí)檢查一次。設(shè)置為零以禁用自動(dòng)更新檢查。
    • $optionName–在何處存儲(chǔ)有關(guān)更新的簿記信息。默認(rèn)為“ external_updates- $ slug”。

    檢查更新()

    手動(dòng)觸發(fā)更新檢查。當(dāng)您通過將$ checkPeriod(上方)設(shè)置為零來禁用自動(dòng)檢查時(shí),此功能特別有用。此方法不帶參數(shù),不返回任何值。

    addQueryArgFilter($ callback)

    注冊(cè)用于過濾查詢參數(shù)的回調(diào)。每當(dāng)更新檢查器需要檢索元數(shù)據(jù)文件時(shí),它將首先運(yùn)行每個(gè)過濾器回調(diào),并將返回的查詢參數(shù)附加到元數(shù)據(jù)URL。這使您可以將任意數(shù)據(jù)傳遞到承載元數(shù)據(jù)的服務(wù)器。例如,商業(yè)插件可以使用它來實(shí)現(xiàn)某種授權(quán)方案,其中只有具有正確“密鑰”的用戶才能獲得自動(dòng)更新。

    回調(diào)函數(shù)將通過查詢參數(shù)的關(guān)聯(lián)數(shù)組傳遞,并應(yīng)返回修改后的數(shù)組。默認(rèn)情況下,更新檢查器會(huì)將以下參數(shù)添加到元數(shù)據(jù)URL:

    • installed_version?–設(shè)置為當(dāng)前安裝的插件版本。
    • checking_for_updates?–如果檢查更新,則設(shè)置為1,否則不設(shè)置(即,在為“插件信息”框加載數(shù)據(jù)時(shí))。

    此方法采用一個(gè)參數(shù)–回調(diào)函數(shù)。

    addHttpRequestArgFilter($ callback)

    注冊(cè)一個(gè)回調(diào),以過濾傳遞給內(nèi)置幫助器函數(shù)wp_remote_get的各種選項(xiàng),更新檢查器使用該函數(shù)定期下載插件元數(shù)據(jù)。回調(diào)函數(shù)應(yīng)采用一個(gè)參數(shù)-關(guān)聯(lián)的參數(shù)數(shù)組-并返回修改后的數(shù)組。有關(guān)可用的參數(shù)及其工作方式的詳細(xì)信息,請(qǐng)參見wp_remote_get上的WP文檔。

    此方法采用一個(gè)參數(shù)–回調(diào)函數(shù)。

    addResultFilter($ callback)

    注冊(cè)一個(gè)回調(diào)以過濾從元數(shù)據(jù)URL檢索到的插件信息。

    回調(diào)函數(shù)應(yīng)帶有兩個(gè)參數(shù)。如果成功檢索了元數(shù)據(jù),則傳遞的第一個(gè)參數(shù)將是PluginInfo的實(shí)例(有關(guān)此類的說明,請(qǐng)參閱源代碼)。否則,它將為NULL。第二個(gè)參數(shù)是wp_remote_get的相應(yīng)返回值(有關(guān)詳細(xì)信息,請(qǐng)參閱WP文檔)。回調(diào)函數(shù)應(yīng)返回一個(gè)新的或修改的PluginInfo實(shí)例或NULL。

    此方法采用一個(gè)參數(shù)–回調(diào)函數(shù)。

    元數(shù)據(jù)格式

    自動(dòng)更新系統(tǒng)使用基于JSON的文件格式來描述插件。本質(zhì)上,整個(gè)文件是一個(gè)大的JSON編碼對(duì)象(AKA哈希表或關(guān)聯(lián)數(shù)組)。每個(gè)字段(或數(shù)組鍵)代表有關(guān)插件最新版本的一條信息。這里是所有可用字段的完整說明。

    為了簡(jiǎn)單起見,常規(guī)元數(shù)據(jù)和與更新相關(guān)的信息都存儲(chǔ)在同一文件中。如果不希望這樣做,則可以使用腳本替換純JSON文件,該腳本檢查“ checking_for_updates”查詢參數(shù)的存在,如果將其設(shè)置為“ 1”,則僅發(fā)出與更新相關(guān)的字段。

    筆記

    您的插件必須處于活動(dòng)狀態(tài),更新才能正常工作。更新檢查器只是由您的插件加載并運(yùn)行的另一段PHP代碼,如果插件處于非活動(dòng)狀態(tài),則不會(huì)運(yùn)行更新檢查器。

    可能不會(huì)立即顯而易見的結(jié)果是,在多站點(diǎn)安裝中,僅當(dāng)插件在主站點(diǎn)上處于活動(dòng)狀態(tài)時(shí)才會(huì)顯示更新。這是因?yàn)楦峦ㄖǔ?huì)顯示在網(wǎng)絡(luò)管理員中,并且在這種情況下,只會(huì)加載主站點(diǎn)上活動(dòng)的插件。WordPress網(wǎng)絡(luò)的主要站點(diǎn)是第一個(gè)創(chuàng)建的站點(diǎn),并且在“?站點(diǎn)->所有站點(diǎn)”列表中具有路徑“ /”?。

    來源于: https://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 国模极品一区二区三区| 国产一区二区免费| 国产成人免费一区二区三区| 69久久精品无码一区二区| 国产无吗一区二区三区在线欢| 日韩人妻精品一区二区三区视频| 色精品一区二区三区| 日韩在线一区二区| 亚洲第一区精品日韩在线播放| 爱爱帝国亚洲一区二区三区| 韩国福利影视一区二区三区| 无码一区二区波多野结衣播放搜索| 在线观看一区二区精品视频| 中文字幕一区在线播放| 肉色超薄丝袜脚交一区二区| 国产精品免费一区二区三区| 一夲道无码人妻精品一区二区| 一区二区三区影院| 日韩精品人妻av一区二区三区| 女人18毛片a级毛片一区二区| 亚洲欧洲专线一区| eeuss鲁片一区二区三区| 无码人妻精一区二区三区| 国产韩国精品一区二区三区久久| 91在线看片一区国产| 无码乱码av天堂一区二区| 无码人妻精品一区二区三区久久久 | 国产在线精品观看一区| 韩国精品一区视频在线播放| 国产精品久久亚洲一区二区| 日本一区二区三区免费高清在线| 日韩aⅴ人妻无码一区二区| 日本一区二区三区久久| 日韩精品人妻av一区二区三区| 国产午夜精品一区二区三区小说| 在线精品亚洲一区二区三区| 一区二区三区视频在线观看| 亚洲AV香蕉一区区二区三区| 日本中文字幕在线视频一区| 精品一区二区三区在线视频| 麻豆国产一区二区在线观看|