【问题标题】:How to modify wordpress plugin functions without editing the plugin?如何在不编辑插件的情况下修改 wordpress 插件功能?
【发布时间】:2012-11-02 20:37:03
【问题描述】:

我正在使用 wordpress,我搜索以修改插件功能而不编辑插件更新后不会破坏功能

但我还没有找到解决方案。你能帮帮我吗?

提前致谢

【问题讨论】:

  • 你能指定哪个插件你想修改吗?不幸的是,大多数插件的编写方式都不允许在不修改代码的情况下覆盖它们的功能,但如果你幸运的话,你想要编辑的插件可能会让你使用钩子和过滤器来做到这一点。
  • 我想修改 WPML 插件。但是这个插件的大多数功能中都没有 do_action() 钩子
  • 如果是类,可以尝试扩展类..
  • 感谢您的回复。我会尝试扩展 WPML 类。
  • 您不能覆盖 PHP 函数 - 您只能通过扩展原始类并在您的类中定义这些函数来覆盖类方法(属于一个类的函数)。扩展 WPML 类的问题是看您是否可以实际使用您的类而不是 WPML 类(我假设他们使用自己的类进行函数回调)。看看他们是否创建了一个全局变量——类似于$wpml = new WMPL();——如果他们这样做了,看看你是否可以访问它。如果可以,您将能够覆盖它。

标签: wordpress function plugins


【解决方案1】:

我多次遇到这个问题。正如其他人所说,您不能修改 PHP 函数。扩展类将不起作用,因为插件将实例化原始类,而不是您的扩展版本。

最好的解决方案(已经为我工作了好几次)是在现有插件中添加钩子并提交给原作者,如下所示:

  1. 如果原始插件在 github 上,请 fork 并克隆它。否则,将原插件放在本地git控制下。您可能需要稍后进行差异或回滚。
  2. 创建一个名为 WPML-extensions(或其他)的新插件
  3. 在原始插件代码中搜索要使用的操作或过滤器。如果它们已经可用并且可以满足您的需求,请通过从 WPML 扩展插件挂钩到它们来使用它们。
  4. 如果 WPML 插件中没有正确的挂钩,请添加它们,然后按照上述步骤操作。尝试使用最新版本的原始插件,以最大限度地提高您的更改被接受的机会。
  5. 如果您通过添加操作或过滤器修改了原始插件,请执行git diff 以保存补丁,以便以后重新应用。将补丁提交给原始插件作者并希望最好。如果您坚持只使用操作和过滤器,作者很可能会立即接受您的更改。
  6. 如果您稍后更新原始插件,则需要重新应用您的更改,直到它们被接受。您可以使用该差异文件。可能有一种方法可以使用git rebase 重播您在更新插件后所做的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多