问题描述
我目前正在对我的一个 WordPress 插件进行重大更新。
该插件允许用户从几个可用的皮肤中进行选择。我经常被要求创建一个自定义的皮肤。为了防止在升级时删除此皮肤,我必须使用 WordPress 钩子来禁用插件的自动更新。这显然不是很理想,因为我希望他们仍然能够更新插件。问题是 WordPress 处理更新的方式 – 它只是删除插件文件夹并安装新版本。因此,删除不是旧版本的文件。
目前我唯一可以解决的问题是拥有两个皮肤文件夹 – 一个在插件文件夹中,一个在上传文件夹中,这真的是我唯一可以为我的用户提供的方式吗?
最佳解决方案
许多插件使用/wp-content/custom-plugin-folder/
来存储自定义的插件数据 (WPTouch) 。
只需使用常量 WP_CONTENT_URL
和 WP_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。