为什么?
有时更改WordPress本身或插件的行为的简单方法可能是直接更改插件或WordPress的文件。提出这样的想法时,通常的响应是:

不要破解内核。

为什么更改内核文件通常不是一个好主意?
考虑吗?
有时候,对于站点而言至关重要的事情根本不可能做,而无需更改核心文件,这是一种很好的方式。在这种情况下,在继续进行黑客攻击之前,您需要了解什么?
如何?
您已经考虑了所有选项,但是唯一的解决方案是黑客攻击核心文件。您应该如何去做?更改核心将如何影响工作流程,例如更新?

评论

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

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

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

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

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

#1 楼

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

添加动作挂钩

十分之九,您可以做如果仅在特定文件中有一个额外的do_action调用,是否需要?在这种情况下,请添加操作,对其进行记录并通过Trac提交补丁。如果有很好的理由(即您不是唯一会使用该补丁程序的人),则可以将其添加到内核中。

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

重构核心文件

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


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

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

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

如果更改得到落实,那么您的黑客就会成为核心的一部分,您将来无需担心。如果不是这样,至少在3个月内升级WP之后,您至少拥有有关如何重新实现该hack的详细文档。

评论


比我更好的措辞:)

– hakre
2010-9-10 10:44

#2 楼


不要破解内核。


这是因为它是针对没有经验的第一级用户的建议。那些骇客核心会破坏其安装,他们无法确保所做的更改可以持续更新等。


当然,骇客核心!


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

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

注意事项

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

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

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

评论


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

–Fredy31
2012年9月2日下午16:31

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

– hakre
13年5月23日在9:58



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

– Synetech
13年7月27日在1:36

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

– Synetech
13年7月27日在16:43

#3 楼

问题是:


每次您更新核心时(例如,由于安全修复程序等),您将必须手动更新它,而不是运行自动更新程序。
,如果您愿意这样做,那么让自己的生活更轻松:
用通用标记(例如// PATCH START// PATCH END)标记每个更改。
使用WinMerge之类的工具来比较现有的标记源与新源,并在必要时跨更改进行复制。
如果复制的代码区域已更改,则必须当心,并对补丁进行适当的更改
请注意,这是一项“永无止境”的工作,占用可计费时间,除非您可以为此向客户重新计费。


您可能会导致期望内核以某种方式起作用的插件引起不兼容问题-这将需要额外的测试

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