修改没有钩子和没有可插拔功能的插件的最好方法是什么?

时间:2014-09-15 作者:dallen

我必须对插件中的一些函数进行一些更改,这些函数没有挂钩,也不可插入。

我的想法是将我修改的函数包装在if ( ! function_exists()) 并将我的修改移动到一个单独的插件中。然后,每当我需要更新插件时,我只需重新添加if ( ! function_exists()) 包装器。

请告诉我为什么这是个坏主意,我应该做什么来代替它。

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

看起来您正在使用的插件对您和/或您的客户机非常重要,而且插件本身很可能会在适当的支持下定期更新。

我肯定会联系作者,讨论插件可能的更改。如果一个变更是一个建设性的变更,并且会给插件带来一定程度的有用性,那么我认为作者没有理由不在近期的版本/更新中实现您的变更。

首先,如果您的更改超出了当前插件的范围,您可以建议并要求作者在将来的版本/更新中根据需要添加适当的过滤器。

但是,是的,在研究其他解决方案之前,我会先从插件作者开始寻找这种支持

SO网友:Mark Kaplun

我想不出一个不使用过滤器的插件的例子。几乎所有插件都使用选项存储数据,因此使用与选项相关的挂钩。

您的插件可能使用了许多操作和过滤器,它们不在其高级代码中,但这并不阻止您使用它们来更改插件的行为。

另一种可能性是,如果没有其他方法影响输出的生成,则使用输出缓冲来操纵输出。

SO网友:Caleb

如果要操作的插件作为类存在,则可以在类中使用\\uu call函数覆盖它(扩展原始插件)。防止您编辑文件;你可能需要重写你的插件来跟上其他插件,但我认为扩展插件的类是你最好的选择,因为作者忽视了这一点。

结束