把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() 实际上是函数,可以在任何调用它们的地方执行。