修改WordPress核心文件


21

为什么?

有时,更改WordPress本身或插件的行为的简单方法是直接更改插件或WordPress的文件。提出这样的想法时,通常的回答是:

不要破坏核心。

为什么更改核心文件通常不是一个好主意?

考虑?

但是,有时候,对于站点而言至关重要的事情根本不可能做,而无需更改核心文件,这是一种很好的方式。在这种情况下,在继续进行黑客攻击之前,您需要了解什么?

怎么样?

您已经考虑了所有选项,但是唯一的解决方案是破解核心文件。您应该如何去做?更改核心将如何影响工作流程,例如更新?


1
我强烈不同意任何有关破解内核的建议,因为我还没有找到我无法解决的任何问题。唯一拥有生产站点任何业务黑客核心的人是绝对不需要阅读任何有关此主题的人,因为他们可能已经在WordPress核心团队中。向人们解释如何做到这一点,只会使100个人中的99个人绝对不应该这样做,从而使他们的决策合理化。我真的很讨厌在这里启用它。JMTCW。
MikeSchinkel 2010年

作为后续,这是一个问题的示例,该问题的第一个答案是“不可能”,我用一个示例显示了如何回答:wordpress.stackexchange.com/questions/972/#984有一种(几乎总是)一种方法不用骇客核心做。
MikeSchinkel 2010年

2
如果更改核心,则每次升级后都必须重新进行更改,并且安装将变为非标准安装,因此人们很难为您提供帮助。只需创建插件,小部件,模板,挂钩或wordpress提供的许多方法中的任何一种,都不必更改核心。
Wadih M.

瓦迪(Wadih)是正确的。我已经对一些核心文件进行了更改,以修复/改进/自定义各种功能,并且在升级时始终感到沮丧,因为我必须检查更改并将补丁应用于新文件。当新文件与旧文件过于不同并且更改的位置不再明显(甚至根本不存在)时,这将更加令人沮丧。
Synetech

1
就像我担心的那样 有时,当没有精巧的钩子(例如修改“我的网站”)时,唯一适用于缓冲输出技巧的钩子是admin_body_classadmin_footer这意味着捕获整个页面。我只是尝试了一下,必须搜索> 2MB的内容以找到相关部分,然后在输出之前对其进行解析和修改。或者,我可以在其右侧添加一行代码,my-sites.php并使用diff工具在更新后应用该补丁(假设完全对其进行了修改)。在这样的情况下,很难反对修改内核。
Synetech

Answers:


21

如果您必须破解内核,请考虑以使其可扩展到其他人的方式进行。

添加动作挂钩

十分之九的时间,如果do_action在特定文件中仅存在一个额外的调用,则可以执行所需的操作。在这种情况下,添加操作,对其进行记录并通过Trac提交补丁。如果有充分的理由来安装您的补丁程序(即您不是唯一会使用该补丁程序的人),则可以将其添加到核心中。

接下来,构建一个自定义插件(您不必释放/分发它!),该插件与此新的挂钩相关联并执行您需要执行的任何功能。

重构核心文件

在其他时候,您可能只需要一段代码就能表现出不同的行为。例如,通过引用传递变量,或者返回值而不是回显它。花一些时间坐下来重构代码,以便它可以完成您需要做的事情……然后通过Trac提交补丁,以便我们其他人可以从您的工作中受益。


您在这里看到主题发展了吗?黑客核心不一定非要...只是大多数开发人员会强烈反对新用户或新手程序员(如果您要问我们如何做某事,我们会建议您每次使用插件之前,甚至考虑建议您修改核心)。

黑客的核心是WordPress的发展和演变方式,但是对于只学习PHP或没有使用WP文件经验的人来说,这是危险的。在接触核心之前,请先从插件开始-如果您破坏了插件,可以快速将其卸载(必要时通过FTP删除)...但是,如果您破坏了核心,则可能会对您的网站以及您的网站造成不良影响数据库。

但是,如果您不可避免地要遭受核心黑客攻击,请进行更改。另外,将您的更改发布在显眼的位置(如果您的博客非常知名,那可能就足够了……但是我建议Trac,因为这是将社区更改引入下一个版本的方式)。您所做的更改可能是可以解决一百多个不同站点中问题的灵丹妙药,所以请回馈帮助您构建站点的社区。

如果更改得以落实,那么您的黑客便成为核心,而且您将来无需担心。如果不是这样,至少在3个月内升级WP之后,您至少拥有详细的文档,说明如何重新实施该hack。


更好的措辞,然后是我的:)
hakre

3

不要破坏核心。

嗯,因为这是对没有经验的第一级用户的建议。那些黑客核心会破坏他们的安装,他们无法确保自己的更改持续更新等。

当然可以,破解核心!

当然,您可以通过使用诸如SVN之类的版本管理系统来真正破解内核。它可以帮助您将自己对核心代码的更改与项目更新保持一致。它还有助于为Wordpress创建补丁并将其发送到项目。

黑客的核心是事实,使Wordpress得以发展。

注意事项

如果您不想安装完整的SVN,并且仍然知道已更改了哪些文件,则可以使用更多的低级工具,例如Diff / Merge(对于Win:WinMerge)或具有比较功能的编辑器(例如,带有比较插件的记事本++)。在Linux上,您可以轻松安装执行相同操作的命令行实用程序。该Geany编辑器配备了一个不错的壳一体化BTW。。

对于辛苦的工作,我更喜欢Eclipse PDT。但这不是为了快速编辑或修改。

因此,我想说的是,如果您使用的是正确的工具,并且想保重,那么破解内核是必经之路。如果您要一起破解其他Noob用户服务器上遗留的东西(是的,Wordpress非常流行),则只需提供一个插件,如果它破坏了某些东西就可以轻松丢弃。


从长远来看,黑客核永远不是一个好的解决方案。决不。
Fredy31 2012年

@ Fredy31; 这是使您的wordpress安装保持最新,正常运行和安全的唯一方法。同样,您所说的“长期运行”真的很长,如果从提供Wordpress补丁到获得它之间需要花费两年甚至更长的时间。报告没有补丁的问题甚至需要更长的时间。照顾自己。
hakre

1
显然,破解内核是很麻烦的,但是我发现这里的抵抗力和耐硫酸盐含量令人惊讶。在FOSS的几乎所有其他领域,都积极鼓励分叉。为什么自定义WordPress如此令人厌恶?我已经看到无数其他项目通过使用RCS来创建程序的修改版本,同时又与主干保持最新状态,从而完全达到了建议的目的。+1是为了给出明显的警告,但告诉真相这确实是可能的,并给出有关如何以最小的难度完成该任务的明显建议。
Synetech

哦,我只记得孩子主题正是这样做的!创建子主题时,实质上是在分叉父主题,并且每当父主题更新时,您都必须手动将所有更改复制到子主题。因此,这种对修改核心的仇恨与接受的另一个相同的WordPress行为不一致。
Synetech

2

问题是:

  1. 每次您更新内核时(例如,由于安全修复等原因),您都必须手动更新它,而不是运行自动更新程序。
    如果您想这样做,那么让自己的生活更轻松:
    • 用通用标记(.eg // PATCH START// PATCH END) 标记每个更改
    • 使用WinMerge之类的工具将现有源与新源进行比较,并在必要时跨更改进行复制。
    • 如果要复制的代码区域已更改,则必须当心,并对补丁进行适当的更改
    • 请注意,这是一项“永无止境”的工作,占用可计费的时间,除非您可以为此向客户重新开票。
  2. 您可能会导致期望内核以某种方式起作用的插件引起不兼容问题-这将需要额外的测试

有时这是100%不可避免的,但是由于花了很多时间,我几乎总是可以提出另一种实现目标或更改规格的方法。这只是维护方面的噩梦,许多人都选择了黑客核心,而不是寻找适当的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.