目錄
此方法的原理
常量
檢查函數
更新數據庫中的版本號
不要覆蓋用戶的選擇!
特殊情況——數組
定期更新 WordPress 插件的重要性是什麼?
如何確保安全更新我的 WordPress 插件?
如果插件更新失敗,我該怎麼辦?
如何自動執行更新 WordPress 插件的過程?
如果插件更新導致我的網站出現問題,我可以回滾插件更新嗎?
如何更新高級 WordPress 插件?
管理多個 WordPress 網站的更新的最佳方法是什麼?
如何禁用特定 WordPress 插件的自動更新?
如何檢查插件更新與我的 WordPress 版本的兼容性?
如果插件更新破壞了我的網站,我該怎麼辦?
首頁 CMS教程 &#&按 WordPress插件以正確的方式更新

WordPress插件以正確的方式更新

Feb 15, 2025 pm 12:56 PM

WordPress 插件更新機制詳解及最佳實踐

WordPress 本身並不提供原生插件更新流程,開發者需要自行實現。這包括更新數據庫中的版本號以及必要時創建新的選項。

WordPress 插件的版本號應存儲在兩個地方:插件主文件中的常量和數據庫中的選項。這使得能夠檢測自上次插件更新以來數據庫選項是否已更新。

更新選項時,開發者應注意不要覆蓋用戶的選擇。如果數據庫中不存在某個選項,則應創建它;如果已存在,則不應覆蓋它。

對於存儲為數組的選項,開發者可以使用 PHP 函數 array_merge() 來確保所有鍵都已定義,並且不會引入任何不存在的選項。這也確保如果用戶更改了舊選項,則會保留其值。

幾週前,我收到一封關於 WP Photo Sphere(我開發的一個 WordPress 插件)的郵件。問題很大:更新插件導致某些安裝程序崩潰。經過一番調查,我發現問題源於插件使用的選項:這些安裝程序沒有為我添加的新選項提供任何默認值。

WordPress Plugin Updates the Right Way 這些值非常重要,所以我需要一種方法來創建默認值。但是,與我的想法相反,WordPress 沒有提供任何原生方法來處理更新過程。

這就是我想寫這篇教程的原因。首先,我們將準確了解為什麼我們需要更新過程以及為什麼 WordPress 不提供此類過程。然後,我將向您展示如何正確創建自己的過程來更新您的選項。

插件更新過程的重要性

通常,僅更改文件不足以正確更新某些內容。例如,當您手動將 WordPress 文件更新到新版本時,平台會要求您點擊一個按鈕來更新數據庫。

假設您在插件中使用選項。隨著插件的發展,您在新版本中將需要更多選項。在用戶首次激活插件時創建新選項很容易,您只需使用激活鉤子即可。

例如,讓我們看一下以下代碼:

function my_awesome_plugin_activation() {
    update_option('my_awesome_plugin_option', 'default value');
}
register_activation_hook(__FILE__, 'my_awesome_plugin_activation');
登入後複製
登入後複製
登入後複製
登入後複製

如果您不熟悉使用 update_option() 來代替 add_option(),請不要擔心,我們稍後將在討論如何處理更新過程時進行解釋。

如果您想要一個新的選項,或者如果您在新版本中更新了現有選項的值,則需要更新已經使用您的插件的用戶數據庫,因此我們需要一個在更新後立即調用的函數。

激活鉤子可能有點令人困惑。畢竟,當您自動更新插件時,它會被停用並重新激活,因此我們可以預期會調用此鉤子。但事實並非如此。

更準確地說,它曾經是,但 WordPress 在 3.1 版中停止了此行為。開發團隊解釋了這個選擇,您可以在 Make WordPress Core 博客上閱讀完整的解釋。主要原因是它並非每次都被調用,因為如果用戶手動更新插件,則可以跳過激活鉤子。

因此,WordPress 沒有提供在插件更新後自動調用函數的默認方法。這就是為什麼您需要構建自己的過程。

如何處理更新過程

在本教程的這一部分中,我將向您展示如何在插件更新後自動調用給定函數。我們將在下一部分中看到如何正確處理現有選項的更新以及新選項的創建(在同一個函數中)。

此方法的原理

我們方法的全局原則是,我們將插件的版本號存儲在兩個地方:插件主文件中的常量和數據庫中的選項。

數據庫中的數字將存儲用戶當前安裝的版本,而常量中的數字是當前版本。如果這兩個數字不同,則自上次插件更新以來數據庫選項尚未更新,因此我們需要執行此操作。

在這種情況下,我們將調用一個更新所有必要選項的函數。此函數還更新存儲在數據庫中的版本號:這樣,我們就不會過度調用此函數。

常量

既然我們已經介紹了我們將要做什麼,那麼是時候編寫代碼了!首先,在插件主文件中添加一個常量定義,並將您的當前版本號作為值。為了防止任何問題,我們測試它是否尚未存在。

function my_awesome_plugin_activation() {
    update_option('my_awesome_plugin_option', 'default value');
}
register_activation_hook(__FILE__, 'my_awesome_plugin_activation');
登入後複製
登入後複製
登入後複製
登入後複製

通常,插件版本使用數字標識,但是,如果您使用其他系統,請隨意使用它。這裡的唯一約束是為每個版本或至少為每個需要更改數據庫(新選項、新默認值等)的版本提供唯一的標識符。

檢查函數

我們現在需要編寫一個函數來檢查數據庫是否需要更新。此函數將比較前面定義的常量與當前存儲在數據庫中的值。為此,我們將確保我們的函數在任何地方都被調用,使用 plugins_loaded 動作,一旦所有插件加載完畢就會觸發。

if (!defined('MY_AWESOME_PLUGIN_VERSION'))
    define('MY_AWESOME_PLUGIN_VERSION', '3.4.1');
登入後複製
登入後複製
登入後複製

此函數將很簡單。我們檢索存儲在數據庫中的版本號,就像任何其他選項一樣,並將它與常量進行比較。如果這些值不同,我們將調用 my_awesome_plugin_activation() 函數。

function my_awesome_plugin_check_version() {
}

add_action('plugins_loaded', 'my_awesome_plugin_check_version');
登入後複製
登入後複製
登入後複製

現在,我們需要澄清一些問題。首先,如果選項在數據庫中尚不存在怎麼辦?如果選項不存在,get_option() 將返回 false,這與您的版本號不同,因此將調用該函數。

那麼我們為什麼要調用激活函數呢?明確地說,我們可以創建一個新的函數,專門用於更新過程。但是,如果您這樣做,您會看到這個新函數將與激活非常相似,因為更新選項可以與創建選項的方式相同。

更新數據庫中的版本號

您可以在上面調用的激活函數中做任何您想做的事情。但是,有一件事是必要的,那就是更新存儲在數據庫中的版本號。這樣,我們不會在每次加載頁面時都調用我們的函數。

function my_awesome_plugin_activation() {
    update_option('my_awesome_plugin_option', 'default value');
}
register_activation_hook(__FILE__, 'my_awesome_plugin_activation');
登入後複製
登入後複製
登入後複製
登入後複製

請注意技巧:我們不使用 add_option(),只使用 update_option()。事實上,如果選項尚不存在,update_option() 將創建它。如果它存在,它將把它的值更新為指示的值。這就是為什麼我們可以毫無問題地將我們的激活函數用作更新函數。

更新選項

不要覆蓋用戶的選擇!

更新任何選項都可以與我們更新版本號的方式相同:您可以調用 update_option(),然後就完成了,即使這是 WordPress 第一次看到該選項。

但是,我們並不總是想更新選項值。事實上,如果您使用選項,通常是為了讓您的用戶個性化設置。通過使用 update_option(),您將在每次更新插件時覆蓋用戶的選擇,這不是我們想要做的。

在上面,我們看到如果選項不存在,get_option() 將返回 false。我們將使用此行為來測試我們想要更新的選項是否存在於數據庫中。如果是這種情況,我們什麼也不做。否則,我們創建該選項。

if (!defined('MY_AWESOME_PLUGIN_VERSION'))
    define('MY_AWESOME_PLUGIN_VERSION', '3.4.1');
登入後複製
登入後複製
登入後複製

請注意,此測試對於我們不想覆蓋的選項是必要的。在某些情況下,我們可能想要這樣做,考慮版本號,我們當然不想保留舊值!

特殊情況——數組

您應該知道 WordPress 允許數組存儲我們的選項的值,並且創建它們並不比創建其他選項更難。例如:

function my_awesome_plugin_check_version() {
}

add_action('plugins_loaded', 'my_awesome_plugin_check_version');
登入後複製
登入後複製
登入後複製

如果您需要多個設置,使用數組是一個好主意。這樣,您不會在數據庫中使用大量條目,並且您限制了另一個插件使用相同名稱的選項的機會。但是,當我們考慮更新過程時,這可能會導致問題。

為了理解原因,假設您有一個數組作為選項,帶有一些鍵。您的用戶肯定會個性化這些值。使用我們上面做的測試,我們只能在選項不存在時創建它,並且這些選擇不會被覆蓋。這看起來很簡單,但是如果您想在數組中創建一個新鍵怎麼辦?

如果選項存在於數據庫中,則前面的代碼不會創建它,因此您的新鍵將不存在。但是,如果我們刪除條件,則數組將在每次新更新時檢索其默認值。不太理想。幸運的是,有一個解決方案!

首先,我們定義一個包含選項默認值的數組(如果存在新鍵)。

if (MY_AWESOME_PLUGIN_VERSION !== get_option('my_awesome_plugin_version'))
    my_awesome_plugin_activation();
登入後複製
登入後複製

然後,我們檢索當前存儲在數據庫中的數組。

function my_awesome_plugin_activation() {
    update_option('my_awesome_plugin_option', 'default value');
}
register_activation_hook(__FILE__, 'my_awesome_plugin_activation');
登入後複製
登入後複製
登入後複製
登入後複製

現在我們可以使用 PHP 函數 array_merge(),將我們的默認值數組作為第一個參數,將用戶的數組作為第二個參數。這樣,我們將得到一個包含 $default 數組中定義的所有鍵的數組,並且我們不會有任何不存在的選項。如果用戶更改了舊選項之一,則會保留其值。使用 array_merge(),我們始終保留最新的定義。

if (!defined('MY_AWESOME_PLUGIN_VERSION'))
    define('MY_AWESOME_PLUGIN_VERSION', '3.4.1');
登入後複製
登入後複製
登入後複製

最後,我們使用 update_option() 將結果存儲在數據庫中。

function my_awesome_plugin_check_version() {
}

add_action('plugins_loaded', 'my_awesome_plugin_check_version');
登入後複製
登入後複製
登入後複製

我們快結束了,但是如果函數第一次執行,我們現在需要修復一個您可能會遇到的錯誤。

此函數在插件激活時被調用,這就是我們想要的。但是,在這種情況下,選項尚不存在,因此 get_option() 返回 false。問題是將 false 用作 array_merge() 的參數會導致錯誤。

我們想要的是簡單的,如果選項不存在,我們希望 $option 是一個空數組。為此,我們可以使用 get_option() 的第二個參數,它表示要獲取的默認值(為了不返回 false)。

if (MY_AWESOME_PLUGIN_VERSION !== get_option('my_awesome_plugin_version'))
    my_awesome_plugin_activation();
登入後複製
登入後複製

結論

一旦您仔細閱讀了它,處理 WordPress 插件的更新過程並不復雜。但是,如果您使用選項,這很重要,因為沒有初始化選項可能會導致一些問題。

目前,WordPress 沒有提供處理插件更新的原生方法。事實上,考慮到我們上面列出的問題,如果我們看到有一天引入了這種類型的功能,則應該以類似於本教程的方式實現它。

您可以在這裡獲取我的示例插件的代碼。將此代碼視為實現您自己的 WordPress 插件更新過程的框架。如果您有任何反饋,請在下面的評論中告訴我。

WordPress 插件更新常見問題解答 (FAQ)

定期更新 WordPress 插件的重要性是什麼?

定期更新 WordPress 插件至關重要,原因如下:首先,更新通常包含可以增強網站性能的新功能和功能。其次,更新通常會修復可能危及網站安全的錯誤和漏洞。最後,更新確保與最新版本的 WordPress 兼容,確保您的網站平穩高效地運行。

如何確保安全更新我的 WordPress 插件?

為了確保安全更新,請務必在啟動更新過程之前備份您的網站。這樣,如果在更新過程中出現任何問題,您可以輕鬆地將您的網站恢復到之前的狀態。此外,建議在將其應用於您的實時網站之前,在暫存網站上測試更新。

如果插件更新失敗,我該怎麼辦?

如果插件更新失敗,第一步是從備份中恢復您的網站。然後,嘗試確定失敗的原因。這可能是由於與另一個插件或主題衝突,或者與您的 WordPress 版本存在兼容性問題。一旦您確定了問題,您可以自己解決它,或者聯繫插件開發者尋求幫助。

如何自動執行更新 WordPress 插件的過程?

WordPress 具有內置功能,允許您自動更新插件。您可以通過轉到 WordPress 儀表板中的“插件”部分,選擇您想要自動更新的插件,然後單擊“啟用自動更新”來啟用此功能。

如果插件更新導致我的網站出現問題,我可以回滾插件更新嗎?

是的,如果插件更新導致您的網站出現問題,您可以回滾插件更新。有幾個可用的插件,例如 WP Rollback,允許您輕鬆地恢復到插件的先前版本。

如何更新高級 WordPress 插件?

高級 WordPress 插件的更新方式與免費插件類似。但是,您需要擁有有效的許可證密鑰才能訪問更新。輸入許可證密鑰後,您可以從 WordPress 儀表板更新插件。

管理多個 WordPress 網站的更新的最佳方法是什麼?

如果您正在管理多個 WordPress 網站,則可能需要花費大量時間為每個網站單獨更新插件。更有效的方法是使用 WordPress 管理工具(例如 ManageWP 或 MainWP),它允許您從單個儀表板管理所有網站的更新。

如何禁用特定 WordPress 插件的自動更新?

如果您想禁用特定插件的自動更新,可以使用 Easy Updates Manager 等插件。此插件允許您控製網站上每個插件的自動更新。

如何檢查插件更新與我的 WordPress 版本的兼容性?

在更新插件之前,您可以通過訪問 WordPress 插件目錄上的插件頁面來檢查其與您的 WordPress 版本的兼容性。在這裡,您會找到有關插件與不同 WordPress 版本的兼容性的信息。

如果插件更新破壞了我的網站,我該怎麼辦?

如果插件更新破壞了您的網站,第一步是從備份中恢復您的網站。然後,停用導致問題的插件。如果您無法訪問您的 WordPress 儀表板,您可以通過 FTP 停用插件,方法是重命名 wp-content/plugins 目錄中的插件文件夾。停用插件後,您可以排除故障或聯繫插件開發者尋求幫助。

以上是WordPress插件以正確的方式更新的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何開始WordPress博客:初學者的分步指南 如何開始WordPress博客:初學者的分步指南 Apr 17, 2025 am 08:25 AM

博客是人們在網上表達觀點、意見和見解的理想平台。許多新手渴望建立自己的網站,卻因擔心技術障礙或成本問題而猶豫不決。然而,隨著平台不斷發展以滿足初學者的能力和需求,現在開始變得比以往任何時候都更容易。 本文將逐步指導您如何建立一個WordPress博客,從主題選擇到使用插件提升安全性和性能,助您輕鬆創建自己的網站。 選擇博客主題和方向 在購買域名或註冊主機之前,最好先確定您計劃涵蓋的主題。個人網站可以圍繞旅行、烹飪、產品評論、音樂或任何激發您興趣的愛好展開。專注於您真正感興趣的領域可以鼓勵持續寫作

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

如何在父分類的存檔頁面上顯示子分類 如何在父分類的存檔頁面上顯示子分類 Apr 19, 2025 pm 11:54 PM

您想了解如何在父分類存檔頁面上顯示子分類嗎?在自定義分類存檔頁面時,您可能需要執行此操作,以使其對訪問者更有用。在本文中,我們將向您展示如何在父分類存檔頁面上輕鬆顯示子分類。為什麼在父分類存檔頁面上顯示子分類?通過在父分類存檔頁面上顯示所有子分類,您可以使其不那麼通用,對訪問者更有用。例如,如果您運行一個關於書籍的WordPress博客,並且有一個名為“主題”的分類法,那麼您可以添加“小說”、“非小說”等子分類法,以便您的讀者可以

如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 Apr 19, 2025 pm 11:57 PM

最近,我們向您展示瞭如何通過允許用戶將自己喜歡的帖子保存在個性化庫中來為用戶創建個性化體驗。您可以通過在某些地方(即歡迎屏幕)使用他們的名字,將個性化結果提升到另一個水平。幸運的是,WordPress使獲取登錄用戶的信息變得非常容易。在本文中,我們將向您展示如何檢索與當前登錄用戶相關的信息。我們將利用get_currentuserinfo(); 功能。這可以在主題中的任何地方使用(頁眉、頁腳、側邊欄、頁面模板等)。為了使其工作,用戶必須登錄。因此我們需要使用

如何在 WordPress 中按帖子過期日期對帖子進行排序 如何在 WordPress 中按帖子過期日期對帖子進行排序 Apr 19, 2025 pm 11:48 PM

過去,我們分享過如何使用PostExpirator插件使WordPress中的帖子過期。好吧,在創建活動列表網站時,我們發現這個插件非常有用。我們可以輕鬆刪除過期的活動列表。其次,多虧了這個插件,按帖子過期日期對帖子進行排序也非常容易。在本文中,我們將向您展示如何在WordPress中按帖子過期日期對帖子進行排序。更新了代碼以反映插件中更改自定義字段名稱的更改。感謝Tajim在評論中讓我們知道。在我們的特定項目中,我們將事件作為自定義帖子類型。現在

對於初學者來說,WordPress容易嗎? 對於初學者來說,WordPress容易嗎? Apr 03, 2025 am 12:02 AM

WordPress對初學者來說容易上手。 1.登錄後台後,用戶界面直觀,簡潔的儀表板提供所有必要功能鏈接。 2.基本操作包括創建和編輯內容,所見即所得的編輯器簡化了內容創建。 3.初學者可以通過插件和主題擴展網站功能,學習曲線存在但可以通過實踐掌握。

如何在 WordPress 中顯示查詢數量和頁面加載時間 如何在 WordPress 中顯示查詢數量和頁面加載時間 Apr 19, 2025 pm 11:51 PM

我們的一位用戶詢問其他網站如何在頁腳中顯示查詢數量和頁面加載時間。您經常會在網站的頁腳中看到這一點,它可能會顯示類似以下內容:“1.248秒內64個查詢”。在本文中,我們將向您展示如何在WordPress中顯示查詢數量和頁面加載時間。只需將以下代碼粘貼到主題文件中您喜歡的任何位置(例如footer.php)。 queriesin

如何使用 IFTTT 自動化 WordPress 和社交媒體(及更多) 如何使用 IFTTT 自動化 WordPress 和社交媒體(及更多) Apr 18, 2025 am 11:27 AM

您是否正在尋找自動化 WordPress 網站和社交媒體帳戶的方法? 通過自動化,您將能夠在 Facebook、Twitter、LinkedIn、Instagram 等平台上自動分享您的 WordPress 博客文章或更新。 在本文中,我們將向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 輕鬆實現 WordPress 和社交媒體的自動化。 為什麼要自動化 WordPress 和社交媒體? 自動化您的WordPre

See all articles