如何在不中断更新过程的情况下编辑WordPress插件

时间:2011-10-06 作者:Aadi

我想用已经可用的WordPress插件添加一些额外的特性/功能。

是否可以在更新插件时进行自定义?

4 个回复
SO网友:fuxia

可能不会。

建议将增强功能添加到插件中的方法是:将修复程序发送给开发人员,并让她将其合并到原始版本中。如果您的更改是相当个性化的定制,则不会发生这种情况。

如果插件是以严格的OOP风格编写的,则可以创建第二个插件,根据需要仅扩展原始插件中的类(类似于子插件)。不幸的是,大多数插件开发人员没有看到这种需要,也没有相应地编写代码。注意load order problem.

如果你能描述一下你想扩展哪个插件,以及你到底想更改什么,我们会帮得更好。

SO网友:Tom Auger

不幸的是,这完全取决于插件(或者更准确地说,取决于插件作者!)如果作者积极思考,并以这种方式创建插件以使其具有可扩展性,那么可以创建自己的插件来添加现有插件中的功能。

注意Toscho所指出的-你的插件顺序很重要(链接再次是here).

Hooks

使插件可扩展的最常见方法是添加钩子(操作和过滤器钩子),然后您可以利用自己的插件。如果你有一个好的代码编辑器(现在我正在NetBeans) 您应该在插件源文件中搜索:do_actionapply_filters. 如果插件作者提供了这些挂钩,那么这是一种非常方便和简单的方法,可以帮助您超越默认设置,或者注入您自己的代码。

Pluggable Functions

如果插件作者很精明,但是使用全局名称空间来实现插件功能,那么他/她可能已经将插件的功能包装在if ( function_exists() ) 条件语句。为了让这对您有利,您必须确保首先加载插件(这可能是一个挑战)。您所要做的就是在完全相同的名称空间中使用完全相同的名称声明您的函数,然后您的函数将替换插件使用的函数。

Extension

如果插件作者是一个很好的OOP程序员,他/她可能会以一种足够细粒度的方式编写插件代码,以便于扩展(因为,正如GOF所说,插件代码肯定是可以修改的)。在plugin类中寻找很多粒度——也就是说执行小型、高度特定任务的方法——这些粒度可以在扩展plugin类的类中重写。当然,正如Toscho提到的,类的架构需要确保它可以被重写,并且它的默认实现不会完全调用自己。

Fork or Patch

如果插件作者正在使用gitHub, 或者以其他方式打开了源代码,您可以向作者提交一个补丁并进行修改(最好是修改插件,使其更加灵活或强大,而无需删除或更改现有特性或功能),或者只需下载源代码,修改插件标题,使其在原作者推出更新时不再更新,最好将更新后的版本提交给作者或作为其自己的实体directly to WordPress. 请注意,如果您将插件提交给WP,您需要为其创建一个站点,并且应该准备好在其他人下载时支持它。

SO网友:Hassan Alvi

我知道这是一个很老的问题,但我想我找到了解决办法。。。

我有一个插件,其中我客户的一位开发人员将其修改到了目录的极限&;子目录更新后,文件被删除,插件崩溃。为了使原始插件独立于任何核心更新,我已将修改后的文件和文件夹移动到名为extension.

使用在中找到的代码https://gist.github.com/wpsmith/af206df2cf6a38e4e2f0

我在中添加了Tarvis Smith定义的类WPS_Extend_Plugin.php 并将其包含在我的插件中。使用WPS_Extend_Plugin 类我已将扩展文件/文件夹目录指向目标文件夹extension. 目前还没有失败,但我不确定这是不是扩展插件的正确方法!

// Require WPS_Extend_Plugin class
require_once( \'classes/WPS_Extend_Plugin.php\' );

// Extend Sitepress Multilingual CMS
new WPS_Extend_Plugin( \'sitepress-multilingual-cms/sitepress.php\', __FILE__, \'3.9.0\', \'CHERRY\' );
// Extend AddThis
new WPS_Extend_Plugin( \'extension\', __DIR__, \'0.1\', \'CHERRY\' );

SO网友:Prathamesh Gharat

我知道这个问题真的很老了,但我觉得这可能会帮助一些人。

如果您觉得这些更改对社区有帮助,请将其提交给开发人员。但是,如果更改是您的安装所特有的,您可以继续阅读以下内容。

我有一个问题是关于对主题的更新版本进行修改。我们做了一个递归diff 从…起old_versionmodified_old_version 然后使用patch 工具

修补程序工具创建的文件包含无法自动应用的更改。我们拥有其中的一些,并且能够轻松地识别和手动进行这些更改。

在进行更改时,必须确保不使用自动缩进等编辑器功能更改整个文件的间距。也就是说,仅在必要时进行更改。这只会使以后进行更改的过程更加耗时。

结束

相关推荐

Can plugins become obsolete?

我认为WordPress插件是由第三方制作的。插件是否必须与WordPress升级保持同步?插件会过时吗?如果它们确实过时了,比如Linkedin共享按钮、推特推特按钮和类似Facebook的按钮的插件,切换到不同的插件会导致喜欢/推特/共享的数量丢失吗?如果插件可能会过时,那么它会发生吗?或者插件通常是最新的?或者他们是开源的,所以其他人会让他们保持最新?(正如你可能猜到的,我不是程序员。)