动作是挂钩的两种类型之一。它们提供了一种在WordPress Core,插件和主题的执行中特定位置运行功能的方法。它们是Filters的对应物。
添加动作
添加动作的过程包括两个步骤:
创建一个回调函数
首先,创建一个回调函数。该函数将在挂钩的动作运行时运行。
回调函数就像普通函数一样:应该加上前缀,并且应该在内部functions.php或可调用的地方。它应该接受的参数将由您要挂接的动作定义;大多数挂钩都定义明确,因此请查看挂钩文档,以查看您选择的操作会将哪些参数传递给函数。
分配(挂钩)回调函数
其次,将回调函数添加到操作中。这称为挂钩,它告诉操作在运行操作时运行您的回调函数。
回调函数准备就绪后,请使用add_action()将其挂钩到您选择的动作。至少add_action()需要两个参数:
- string $tag 这是您要执行的操作的名称,并且
- callable $function_to_add 回调函数的名称。
执行挂钩wporg_callback()时,以下示例将运行init:
function wporg_callback() {
// do something
}
add_action( 'init', 'wporg_callback' );
随着您获得更多的经验,查看WordPress Core源代码将使您找到最合适的钩子。
附加参数
add_action()可以接受两个附加参数,分别int $priority是赋予回调函数的优先级和int $accepted_args传递给回调函数的参数数量。
优先
许多回调函数可以关联到一个动作。init例如,钩子得到了很多使用。在某些情况下,即使尚未挂钩其他回调函数,也需要确保您的回调函数在其他回调函数之前或之后运行。
WordPress基于两件事来确定回调函数的运行顺序:第一种方法是通过手动设置priority。这是使用的第三个参数完成的add_action()。
以下是有关优先级的一些重要事实:
- 优先级是正整数,通常在1到20之间
- 默认优先级(即,没有priority手动提供值时分配的优先级)为10
- 优先级值没有理论上限,但实际上限为100
priority 越小优先级越高
priority一样先注册的优先级高
例如,以下所有回调函数均已注册到该
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);
在上面的示例中:
第一个函数运行为wporg_call_backrun_me_early(),因为它的手动优先级为9
接下来,wporg_callback_run_me_normal(),因为它没有设置优先级,所以它的优先级是10
接下来,wporg_callback_run_me_late()运行,因为它的手动优先级为11
最后,wporg_callback_run_me_later()运行:它的优先级也为11,但之后被钩住了wporg_callback_run_me_late()。
参数
有时,回调函数最好接收一些与被挂钩的动作有关的额外数据。
例如,当WordPress保存帖子并运行该save_post钩子时,它将两个参数传递给回调函数:要保存的帖子的ID和帖子对象本身:
1个
do_action( ‘save_post’, $post->ID, $post );
当save_post钩子注册了一个回调函数时,它可以指定它想要接收这两个参数。它通过告诉add_action(在这种情况下)2以第四个参数作为期望值来做到这一点:
add_action('save_post', 'wporg_custom', 10, 2);
为了在回调函数中实际接收这些参数,请修改回调函数将接受的参数,如下所示:
function wporg_custom( $post_id, $post ) {
// do something
}
备注:优良作法是为回调函数参数赋予与传递的参数相同的名称,或尽可能接近。