WordPress - 覆盖插件中的函数

bco*_*our 12 wordpress overriding function contact-form-7

一段时间以来,我一直想知道修改WordPress用户创建的插件的最佳做法是什么?

例如,我想在Contact Form 7插件中更改几行代码.该函数名为function wpcf7_ajax_json_echo(),位于:

wp-content > plugins > contact-form-7 > includes > controller.php
Run Code Online (Sandbox Code Playgroud)

当然我可以直接更改该文件中的代码并完成,但是当我想要更新该插件时,我运气不好,因为我的修改可能会被写完.

我知道我应该通过我的functions.php文件来实现这一点,但我不确定如何实现这一目标.此外,该特定功能是100多行代码,我猜我不想覆盖整个函数,因为插件的作者很可能在将来选择更新该函数中的某些内容.

有没有人知道我最简单的方法是通过我的functions.php文件修改该函数中的几行?

谢谢!

Jas*_*ary 7

我不建议更换核心.但是,你有点腌渍.

您可以:

  • 直接在插件中更新功能代码
  • 从插件中复制当前的功能代码并在functions.php中覆盖它

最后,您仍遇到同样的问题 - 未来的兼容性.

或者:

  • 此更新将覆盖您的插件更改.
  • 您的函数会覆盖插件更改.

所以,尽管我不想说,我会直接更新插件.至少在升级时,您会很快知道您的更改缺失了.此外,插件更新可能包含您的更改.


Sha*_*ane 6

如果您想保持向前兼容性(并且您的主机具有SVN可用),您可以使用SVN,同时能够保持自己的更改.

插件目录中的每个插件都必须有一个SVN仓库(这就是目录知道是否有更新).这是CF7回购.

将主干检出到/ custom-contact-form-7 /等文件夹中的/ plugins /目录.更改wp-contact-form-7.php文件以为其指定唯一名称,并进行要进行的更改以进行自定义.

要获得新的更新,您只需svn up获取它们,它们就会与您的更改合并.但是,您可能不得不有时清理合并冲突.

如果需要,使用Subversion进行版本控制是每个人开始学习SVN的地方.现在还有一个Github回购,如果你想分叉那么.

  • +1用于提倡版本控制.但是,这需要很多开销:检查仓库,在工作副本中进行更改,导出到当前项目,管理工作副本.你基本上*分叉*项目的几行代码更改. (2认同)