如何重写一个JavaScript核心函数?

时间:2015-09-20 作者:Becki Beckmann

自最新的WP版本4.3.1以来,WordPress核心JavaScript文件发生了变化:/wp-admin/js/edit-comments.js

在第376行,WordPress开发人员添加了一个检查,检查管理面板中列出注释的表中有多少表列。

colspanVal = $( \'th:visible, td:visible\', c ).length;
问题是,我正在将数据添加到注释中,数据实际上显示在一个表中;这会导致上面的jQuery对这些表列进行计数,然后使用colspan 如果你在WordPress管理评论部分点击“回复”,就会把布局搞得一团糟。

<tr id="replyrow" class="inline-edit-row" style="">
    <td class="colspanchange" colspan="24">
        ...
    </td>
</tr>
所以我发现我必须更改jQuery选择器并将我的表排除在计数之外thtd.

colspanVal = $( \'th:visible table:not(".timeSheetEntries"), td:visible table:not(".timeSheetEntries")\', c ).length;
这个小小的黑客程序工作正常,但我不想每次WordPress发布更新时都应用这个修改。

如何覆盖这个WordPress JavaScript核心函数?不确定WordPress中是否有JavaScript的任何操作和过滤器?

或者,我应该让自定义JavaScript出列和入列吗?

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

你不能。

虽然可以操纵JS和HTML,但除非在codex、代码注释或其他一些核心文档中明确地以“正确的方式”记录,否则作为一种长期策略是不可取的。

除了理论上的反对意见外,目前很难或几乎不可能在不退出核心文件队列并将您的版本排队的情况下覆盖特定的JS核心功能,而实际上,这并不能消除对核心文件进行后续更改并用每个更改核心文件的版本重新实现更改的需要。

您最好的选择可能是在trac上打开一张罚单,解释更改正在破坏您的代码,以及为什么您没有其他选择。这可能不会对您的4.3.1有所帮助,但您可能会得到一个更好的建议,告诉您如何在不攻击内核的情况下完成所需的工作,并且可能会将有问题的代码还原为4.4。