12

I've been wonder for some time what the best practice is for modifying a plugin created by a WordPress user?

For example there are a couple lines of code I want to change within the Contact Form 7 plugin. The function is called function wpcf7_ajax_json_echo() and is located in:

wp-content > plugins > contact-form-7 > includes > controller.php

Of course I could just change the code right in that file and be done, but then I'm out of luck when I want to update that plugin as my modifications will probably get written over.

I know I should be making this happen via my functions.php file, but I'm not sure how to go about achieving this. Also, that particular function is 100+ lines of code and I'm guessing I don't want to overwrite that whole function, because there is a good chance the author of the plugin may choose to update something in that function in the future.

Does anyone know the cleanest way for me to modify a few lines within that function via my functions.php file?

Thank you!

4

3 回答 3

7

我不建议更改核心。但是,您有点麻烦。

你可以:

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

最后,你还是遇到了同样的问题——未来的兼容性

任何一个:

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

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

于 2011-09-21T16:46:12.970 回答
6

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

插件目录中的每个插件都必须有一个 SVN 存储库(目录就是这样知道是否有更新的)。这是 CF7 存储库。

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

要获取新的更新,您只需svn up获取它们,它们就会与您的更改合并。不过,有时您可能必须清理合并冲突。

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

于 2011-09-21T17:09:10.697 回答
0

我绝对认为您应该将更新添加到 functions.php 或自定义插件中。现在很麻烦,但是每次升级插件时麻烦都会少得多。

无论如何,您都必须参考更新中所做的更改。即使您能够在不复制此文件的情况下扩展功能,您也必须至少检查并确保您的更改仍然有效。并且 WinDiff/BBEdit 的比较可以快速解决这个问题。

所以我的第一个建议是覆盖该功能。

第二个建议:我注意到这个插件有一些扩展(abc);也许您可以了解他们是如何制作扩展的,并使用这些细节来制作您自己的。嗯,这就像建议你建造一座新房子来修理滴水的水龙头,但这是一个想法。

于 2013-03-04T16:17:00.970 回答