action是两种类型的钩子之一。它们提供了一种在执行WordPress Core,插件和主题的特定点运行函数的方法。Action 的回调函数不会向调用 Action 挂钩返回任何内容。它们是过滤器的对应物。

 

添加操作

添加操作的过程包括两个步骤:

 

创建回调函数

首先,创建一个回调函数。此函数将在运行其挂钩到的操作时运行。

回调函数就像普通函数一样:它应该有前缀,并且应该在可调用的地方或某个地方。它应该接受的参数将由你挂接到的操作定义;大多数钩子都定义得很好,因此请查看钩子文档,了解您选择的操作将传递给函数的参数。functions.php

 

分配(挂钩)回调函数

其次,将回调函数添加到操作中。这称为挂钩,并告知操作在操作运行时运行回调函数。

当回调函数准备就绪时,使用 add_action() 将其挂接到您选择的操作。至少需要两个参数:add_action()

  1. string $hook_name这是您要挂钩的操作的名称,以及
  2. callable $callback回调函数的名称。

下面的示例将在执行钩子时运行wporg_callback():init

function wporg_callback() {
    // do something
}
add_action( 'init', 'wporg_callback' );

您可以参考 Hooks 一章以获取可用钩子的列表。

随着你获得更多的经验,浏览WordPress Core源代码将让你找到最合适的钩子。

 

其他参数

add_action()可以接受两个附加参数int$priority, int $accepted_args,用于为回调函数提供的优先级,以及用于将传递给回调函数的参数数。

 

优先权

许多回调函数可以挂接到单个操作。例如,钩子得到了很多使用。在某些情况下,可能需要确保回调函数在其他回调函数之前或之后运行,即使这些其他函数可能尚未挂钩。

WordPress 根据两件事确定回调函数的运行顺序:第一种方法是手动设置优先级。这是使用第三个参数来完成的。

以下是有关优先级的一些重要事实:

  • 优先级为正整数,通常介于 1 和 20 之间
  • 默认优先级(即手动提供任何值时分配的优先级)为 10priority
  • 优先级值没有理论上的上限,但实际的上限是100

优先级为 11 的函数将在优先级为 10 的函数之后运行;优先级为 9 的函数将在优先级为 10 的函数之前运行。

确定回调函数顺序的第二种方式只是根据它在同一优先级值中的注册顺序。因此,如果为具有相同优先级的同一钩子注册了两个回调函数,则它们将按照它们注册到钩子的顺序运行。

例如,以下回调函数都注册到钩子,
但优先级不同:init

add_action('init', 'wporg_callback_run_me_late', 11);
add_action('init', 'wporg_callback_run_me_normal');
add_action('init', 'wporg_callback_run_me_early', 9);
add_action('init', 'wporg_callback_run_me_later', 11);

在上面的示例中:

  • 第一个函数运行将是 ,因为它的手动优先级为 9wporg_callback_run_me_early()
  • 接下来wporg_callback_run_me_normal(),因为它没有设置优先级,所以它的优先级是 10,
  • 接下来,运行wporg_callback_run_me_late(),因为它的手动优先级为 11
  • 最后,是运行wporg_callback_run_me_later():它的优先级也是 11,但它在 wporg_callback_run_me_late()之后.

 

参数数

有时,回调函数需要接收一些与挂钩到的操作相关的额外数据。

例如,当WordPress保存帖子并运行钩子时,它会将两个参数传递给回调函数:正在保存的帖子的ID,以及帖子对象本身。

do_action( 'save_post', $post->ID, $post );

为挂钩注册回调函数时,它可以指定要接收这两个参数。它通过(在这种情况下)作为第四个参数来告诉期望它们。

add_action('save_post', 'wporg_custom', 10, 2);

为了在回调函数中实际接收这些参数,请修改回调函数将接受的参数,如下所示:

function wporg_custom( $post_id, $post ) {
    // do something
}