无法从初始化挂接调用其他挂接

时间:2012-11-11 作者:Yoga

与此问题相关(Use wp init hook to call other hooks?) 但不一样。

有时,我发现当我将钩子放入init钩子时,钩子将无法运行,例如。

不工作:

add_action(\'init\',\'my_init\');
function my_init() {
    add_filter(\'locale\', ...
}
工作:

add_action(\'init\',\'my_init\');
add_filter(\'locale\', ...
当然,一些钩子/过滤器在init钩子中可以正常工作,但是definitely not all of them.

所以在我看来it is a bad practice to chain actions/filters together?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

这个locale 钩子早就发生了init. 要查看何时可以使用哪个挂钩、变量、常量、函数、类或文件,请安装我的插件T5 WP Load Order.

你会得到一个很详细的日志文件。搜索Hook: locale, 然后用于Hook: init. 你会发现你需要plugins_loaded 如果要链接挂钩,请将其作为父操作。

这是一种好的做法吗?视情况而定。如果仅在第一次回调成功运行时才需要第二次回调,那么yes. 如果两个回调都应该彼此独立运行,那么no.<链接应该反映程序的逻辑。

SO网友:Mario Peshev

在另一个钩子的回调中附加一个钩子并不是一个坏习惯,相反,有时它是强制性的。问题是,您应该知道操作和过滤器的顺序,因为您可以在第一个操作之后执行其他操作时尝试调用一个操作(因此您的第二个挂钩已经执行了,对于新附加的事件来说为时已晚)。

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require