把WordPress的执行想象成阶梯上的一系列梯级:WordPress爬一个梯级,然后爬下一个梯级,然后再爬下一个梯级,依此类推。
把动作挂钩想象成横档本身。Here is a (slightly abbreviated, I think) list of those actions, or "rungs" executed during a typical WordPress request.
因此add_action()
调用只是在梯形图上的特定梯级上执行函数的指令。只要你能做到add_action()
在您希望指定函数执行的运行之前调用一个梯级,那么就无所谓了,您使用哪个梯级来创建add_action()
呼叫但是,有理由使用特定的梯级来执行函数。
举个例子:一个主题functions.php
文件执行时间(我相信)after_setup_theme
. 因此,您不能使用主题将动作添加到之前的任何梯级after_setup_theme
, 因为WordPress已经执行了这些操作(即WordPress已经爬上了阶梯上的那些“梯级”)。
如果你想执行wp_enqueue_script()
在之前挂接到动作的回调中init
,WordPress将生成_doing_it_wrong()
注意,因为wp_enqueue_script()
之前不应执行init
, 最正确的方法是wp_enqueue_scripts
(前端)或admin_enqueue_scripts-{hook}
(管理)。
但是:
我能把这样的东西也扔进去吗?
add_action(\'get_header\', \'enable_threaded_comments\');
add_action(\'widgets_init\', \'unregister_default_wp_widgets\', 1);
remove_action(\'wp_head\', \'rsd_link\');
所有这些都很好
after_setup_theme
, 因为所有指定动作的触发时间都晚于
after_setup_theme
. 具有
add_action()
, 您只需告诉WordPress,“
将此回调按指定操作排队”具有remove_action()
, 您只需告诉WordPress,“从指定操作中删除此回调”在re中编辑:
回答得很好-谢谢。我理解其中的大部分,但有点困惑,为什么我所有的钩子调用add_action
和remove_action
可以,但是wp_enqueue_scripts
不是吗?之后他们都开火了after_setup_theme
. 我知道你说是因为我不能执行wp_enqueue_scripts
之前init
; 虽然你不告诉我,我怎么知道?例如,我如何知道在执行其他操作之前是否还有其他操作无法执行。
因为add_action()
只需对回调进行排队,在回调中实际执行函数。但功能如下wp_enqueue_script()
或wp_enqueue_style()
实际上是函数,可以在任何调用它们的地方执行。