在init()钩子中添加钩子有什么好处?

时间:2014-03-18 作者:Yoga

我看到很多插件使用这种方法来添加一个新的钩子,例如。

add_action(\'init\', function() {
   add_action(\'SOME_LATER_HOOK\', xxx);
   add_filter(\'SOME_LATER_FILTER\', yyy);
});
为什么他们不直接添加挂钩?我发现没有任何好处,例如性能

为什么不

add_action(\'SOME_LATER_HOOK\', xxx);

3 个回复
SO网友:Lee Willis

有时,在决定添加操作或筛选器之前,需要运行一些代码。这可能涉及检查用户的权限、检查页面请求的类型、检查其他插件是否处于活动状态等。

在WordPress以某种方式执行之前,这些检查中的一些可能是不可能的,因此在init钩子中执行这些检查,而不是在插件包含中执行,这是相当常见的。

像这样做意味着你的“初始化”都在一个地方,即使你的一些行为不需要它。

SO网友:Rarst

如有必要,可以更轻松地从init 超过两个(或者可能是五十个)。

通常建议之前不要运行任何操作init 一般来说,这是一个典型的起点,即使它不是由所需的技术影响所强制的。

SO网友:s_ha_dum

在我看来,在钩子上添加钩子是相当浪费的——浪费资源。如果你这样做,你有两个或更多的电话add_user_func_array(), 否则,您将只有一个,更不用说在此之前完成的其他处理工作。

例外情况如下:

当您需要使用某个功能并且需要确保该功能可用时。这对于mu插件有时是必要的,因为它加载得很早,as done here. 例如,除非在加载插件后挂接,否则MU插件将无法使用插件代码as in this answer.也可以“连锁”挂钩,以提供一定的灵活性to some special purpose code.

结束