問題描述

我目前正在對我的一個 WordPress 外掛進行重大更新。

該外掛允許使用者從幾個可用的皮膚中進行選擇。我經常被要求建立一個自定義的皮膚。為了防止在升級時刪除此皮膚,我必須使用 WordPress 鉤子來停用外掛的自動更新。這顯然不是很理想,因為我希望他們仍然能夠更新外掛。問題是 WordPress 處理更新的方式 – 它只是刪除外掛資料夾並安裝新版本。因此,刪除不是舊版本的檔案。

目前我唯一可以解決的問題是擁有兩個皮膚資料夾 – 一個在外掛資料夾中,一個在上傳資料夾中,這真的是我唯一可以為我的使用者提供的方式嗎?

最佳解決方案

許多外掛使用/wp-content/custom-plugin-folder/來儲存自定義的外掛資料 (WPTouch) 。

只需使用常量 WP_CONTENT_URLWP_CONTENT_DIR Docs 來檢查您的資料夾的存在並檢索任何可用的外觀。

以下文章雖然與本問題沒有直接關係,但解釋了外掛/主題在載入自己打包的.mo 檔案之前首先在 wp-content/languages 資料夾中搜尋翻譯的重要性。這是值得一讀的,希望你在下一個版本中應用這個概念:)

Loading WordPress language files the right way
http://www.geertdedeckere.be/
I would like to point out that is important to load custom user language files from WP_LANG_DIR before you load the language files that ship with the plugin. When multiple mo-files are loaded for the same domain, the first found translation will be used. This way the language files provided by the plugin will serve as a fallback for strings not translated by the user.

次佳解決方案

另一種方法是讓人們新增自己的 sub-plugin 。例如,您的核心外掛中獲取外觀的程式碼可能類似於:

function get_available_skins() {
    $skins[] = '/includes/default-skin.css';
    $skins[] = '/includes/2012-skin.css';

    return apply_filters( 'get_available_skins', $skins );
}

然後,使用者可以建立一個與您相鄰的自定義外掛 (單獨啟用,因此不會影響更新),執行以下操作:

add_filter( 'get_available_skins', 'my_custom_skin' );
function my_custom_skin( $skins ) {
    $skins[] = '/my-custom-skin.css';

    return $skins;
}

這與 WordPress 使用鉤子使其本身可擴充套件完全相同。不要重新發明輪子。

(顯然,我不知道你正在使用的外掛,自定義的皮膚是什麼樣的,或者你有什麼編碼的東西,所以你必須使用上面的程式碼作為一個模型,如何重構你的自己的程式碼。)

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。