如何在保持升级能力的同时自定义插件

时间:2012-07-20 作者:Daniel Chatfield

我目前正在对我的一个WordPress插件进行重大更新。

该插件允许用户从多个可用皮肤中进行选择。我经常被要求创建自定义皮肤。为了防止这个皮肤在升级时被删除,我必须使用WordPress挂钩来禁用插件的自动更新。这显然并不理想,因为我希望他们仍然能够更新插件。问题在于WordPress处理更新的方式——它只是删除插件文件夹并安装新版本。因此,删除的文件实际上不是旧版本的一部分。

目前,我唯一可以绕过它的方法是拥有两个皮肤文件夹——一个在插件文件夹中,另一个在上传文件夹中——这真的是我向用户提供这一功能的唯一方法吗?

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

许多插件使用/wp-content/custom-plugin-folder/ 存储自定义插件数据(想到WPTouch)。

只需使用常量WP_CONTENT_URLWP_CONTENT_DIR Docs检查文件夹是否存在并检索任何可用的皮肤。

下面的文章虽然与这个问题没有直接关系,但解释了插件/主题搜索翻译的重要性firstwp-content/languages 文件夹before 加载自己的包装.mo 文件。这本书值得一读,希望您能在下一个版本中应用这一概念:)

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. 当为同一域加载多个mo文件时,将使用第一个找到的翻译。这样,插件提供的语言文件将作为用户未翻译字符串的后备。

SO网友:EAMann

另一种方法是让人们添加自己的子插件。例如,获取外观的核心插件中的代码可能类似于:

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使用挂钩使自身可扩展的方式完全相同。不要重新发明轮子。

(显然,我不知道您使用的是什么插件,自定义皮肤是什么样子,或者您是如何进行编码的,因此您只能将上面的代码用作如何重构自己代码的模型。)

结束

相关推荐

Beta Versioning of Plugins

当我为一些bug编写修复程序时,我通常会增加版本并将其发送给bug查找程序,以查看我的修复程序是否有效。如果我有1.2.5 我想创建一个测试版,一旦我提交代码,它将变得多余,我应该使用1.2.5-beta 或1.2.6-beta? 我担心的是1.2.6 <;1.2.6-beta 因此,字符串比较可能有利于beta版,而bug查找程序不会收到发布稳定版本的通知。编辑:如果在不考虑发布类型的情况下对字符串进行绝对比较,则可以使用1.2.5-fix 然后1.2.6. 该问题也概述在http://en.wik