挂钩到wordpress核心的自定义挂钩是否会被wordpress自动执行,还是我们必须自己调用定制钩子上的do_action
函数?
示例:
add_action("action_one","some_process",10);
add_action("action_one","some_different_process",11);
function some_process(){ //... }
function some_different_process(){ //... }
do_action("action_one");
首先执行some_process
,然后在调用some_different_process
后执行do_action("action_one")
吗?
答案 0 :(得分:1)
如果调用了操作,则会自动执行挂接到操作的所有函数,但如果未触发操作,则不会调用它们。
例如,如果你有:
add_action("action_one","some_function",10);
如果some_function
被触发,则会调用action_one
。如果永远不会触发action_one
,则不会调用some_function。
do_action
是一种手动触发动作的机制,但要记住它会触发任何钩子进入该动作,而不仅仅是你的(除非你设置了一些过滤器)。
另一个例子:让我们假设你设置了一个自定义函数来运行save_post
行动:
add_action( 'save_post', 'top_secret_function' );
然后,每次保存帖子时,top_secret_function
都会运行。
如果您想手动触发save_post
(不实际保存帖子),您可以执行以下操作:
do_action( 'save_post' );
它将触发你的top_secret_function
,但通常不推荐这样做,因为它还会触发挂钩到save_post
的任何其他函数(许多插件和核心文件都会这样做)。
You can setup custom actions使用add_action
和do_action
的组合。
答案 1 :(得分:1)
如果您创建自定义主题或插件中存在的自定义操作挂钩,则是,您必须通过do_action
在您希望触发它们的适当位置调用它们。
WordPress不会自动找到动作挂钩并触发它们。它有许多内置的钩子,您可以锁定它们以运行自定义代码,但是如果您创建自己的钩子,那么您还需要设置适当的do_action
调用以运行它们。
要回答有关some_process
和some_different_process
执行顺序的其他问题,some_process
将在some_different_process
之前运行,因为它的优先级较低。
如果你想让一个动作提前运行,给它一个较小的数字,如1或5,如果你不关心它在哪里运行或者希望它最后运行,我通常使用更高的数字,如100或1000。如果两个钩子被定义为具有相同的优先级,通常首先注册的钩子将在具有相同优先级的另一个钩子之前运行。