wordpress:如何执行操作?

wordpress: how do actions get executed?

挂接到 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");

调用do_action("action_one")时,是否先执行some_process,然后执行some_different_process

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

例如,如果您有:

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

如果action_one被触发,那么some_function将被调用。如果从未触发 action_one,则不会调用 some_function。

do_action 是一种手动触发操作的机制,但请记住,它会触发该操作的任何挂钩,而不仅仅是您的挂钩(除非您设置了一些过滤器)。


另一个示例: 假设您在操作 save_post:

上设置了自定义函数 运行
add_action( 'save_post', 'top_secret_function' );

那么每次你保存 post 你的 top_secret_function 就会 运行.

如果您想手动触发 save_post(无需实际保存 post),您可以使用:

do_action( 'save_post' );

并且它会触发你的 top_secret_function,但通常不推荐这样做,因为它还会触发挂接到 save_post 的任何其他函数(许多插件和核心文件都会这样做)。

You can setup custom actions 使用 add_actiondo_action.

的组合

如果您创建自定义主题或插件中存在的自定义操作挂钩,那么是的,您必须通过 do_action 在您希望触发它们的适当位置调用它们。

WordPress 不会自动查找操作挂钩并触发它们。它有许多内置的挂钩,您可以使用它们来 运行 自定义代码,但是如果您创建自己的挂钩,则还需要设置适当的 do_action 调用以便运行 他们。

要回答有关 some_processsome_different_process 执行顺序的其他问题,some_process 将在 some_different_process 之前 运行 因为它的执行顺序较低优先编号。

如果您希望某个动作尽早 运行,请给它一个较小的数字,例如 1 或 5,如果您不关心它 运行 的位置或希望它 运行 最后,我通常使用更大的数字,如 100 或 1000。如果两个钩子定义了相同的优先级,通常先注册的钩子 运行 优先于另一个具有相同优先级的钩子。