2015-10-05 60 views
2

钩住wordpress核心的自定义钩子是否会被wordpress自动执行,还是我们必须自己调用定制钩子上的do_action函数?wordpress:行为如何执行?

例子:

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")被调用后执行?

回答

1

如果创建存在于您的自定义主题或插件内的自定义操作挂钩,那么,你必须通过do_action在适当的位置打电话给他们,你希望他们被触发。

WordPress不会自动查找动作钩子并触发它们。它具有一些内置的钩子,您可以通过它们来锁定以运行自定义代码,但是如果您创建了自己的钩子,则还需要设置相应的do_action呼叫才能运行它们。

要回答你关于some_processsome_different_process的执行顺序等问题,some_processsome_different_process因为它有一个低优先级号之前运行。

如果你想要一个行动提前运行,给它一个像1或5这样的低数字,如果你不关心它在哪里运行或者希望它最后运行,我通常使用更高的数字,如100或1000 。如果两个钩子被定义为具有相同的优先级,通常先登记的钩子将优先于另一个优先级。

+0

最佳答案!我可以告诉你对wordpress和smart很有经验。 TY。 – dave

1

如果操作被调用,所有挂钩到某个操作上的函数都会自动执行,但如果该操作未触发,则不会调用它们。

例如,如果您有:如果action_one触发

add_action("action_one","some_function",10); 

然后some_function将被调用。如果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_actiondo_action的组合。

+0

所以在一般的行动是指wordpress触发,而不是程序员正确? – dave

+0

既不?这一切都取决于你勾选的动作,你的功能,它的使用方式等等。你可以使用组合设置自定义动作:http://relearningtheweb.blogspot.com/2012/12/wordpress-create-custom -action-hook-in.html – themerlinproject

+0

但我认为你正在获得这个概念 - 如果你勾选了一个wordpress动作,那么当动作被调用时,wordpress将最终调用你的函数。如果需要,您可以使用do_action手动调用该操作。 – themerlinproject