导致WordPress钩子(hooks)重复调用的一个可能性——插件重复安装

midsection of man working

最近在使用一款WordPress插件的过程中,遇到了程序无法按照预期效果工作的bug。很多时候,这未必是程序本身的问题,而与不同插件在同一个WordPress钩子(hooks)上的调用产生了冲突有关。

为了查看钩子的使用情况,可以安装下述两款插件:

也可以将插件逐个关闭过去,一直到问题解决为止。那么最后一个被关闭的插件,就是导致钩子调用冲突问题的插件了。

不过今日笔者遇到了一个特殊情况。笔者几乎关闭了全部能关的插件,问题仍然不能解决。而当事插件肯定不能关闭,因为它是我解决问题的前提——我就是为了继续使用这款插件才来排查问题的;关掉此插件,那不叫解决问题,叫做消灭问题本身——当然,这也就导致了「灯下黑」。

由于机缘巧合,笔者今日使用移动设备上的Jetpack应用程序来管理插件的开闭。这时,发现当事插件被我安装了两份——而版本号不一。

原来当我在GitHub上手动安装当事插件的0.7.1版本时,从WordPress官方插件市场上下载的0.7.0没有被自动删除,而是留在WordPress中。后来我从GitHub下载了 0.8.0并升级,升级脚本也自动删除了0.7.1版本,而意外残留在那里的0.7.0版则完全没有动到。这多馀出来一份的插件根本无法在WordPress仪表板中找到。而在Jetpack移动应用程序的插件管理界面中找到了两个重复的当事插件。

那么这就是问题所在了。因为有两个重复插件开在那边,自然会调用完全相同的钩子,从而产生冲突了。

今日的发现也给我们提了个醒——钩子冲突的成因千奇百怪,插件的异版本/异来源重复安装也是一个可能性。

Discover more from 山月

Subscribe now to keep reading and get access to the full archive.

Continue reading