WordPress - 覆盖插件中的函数

时间:2011-09-21 16:36:40

标签: wordpress function override contact-form-7

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

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

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

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:7)

我不建议更改核心。但是,你有点腌渍。

你可以:

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

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

或者:

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

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

答案 1 :(得分:6)

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

插件目录中的每个插件都必须有一个SVN repo(这就是Directory知道是否有更新)。 Here's the CF7 repo.

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

要获得新的更新,您只需svn up即可获得这些更新,并且它们会与您的更改合并。但是,您有时可能需要清除合并冲突。

Version Control with Subversion是每个人开始学习SVN的地方,如果你需要的话。现在还有一个Github repo,如果你想分叉那么。

答案 2 :(得分:0)

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

无论如何,您始终必须参考更新中所做的更改。即使您无需复制此文件即可扩展功能,但您必须至少检查并确保更改仍然有效。而WinDiff / BBEdit的比较将很快完成。

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

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