wordpres——action


动作是挂钩的两种类型之一。它们提供了一种在WordPress Core,插件和主题的执行中特定位置运行功能的方法。它们是Filters的对应物。

添加动作

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

创建一个回调函数

首先,创建一个回调函数。该函数将在挂钩的动作运行时运行。

回调函数就像普通函数一样:应该加上前缀,并且应该在内部functions.php或可调用的地方。它应该接受的参数将由您要挂接的动作定义;大多数挂钩都定义明确,因此请查看挂钩文档,以查看您选择的操作会将哪些参数传递给函数。

分配(挂钩)回调函数

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

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

  1. string $tag 这是您要执行的操作的名称,并且
  2. 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
}

备注:优良作法是为回调函数参数赋予与传递的参数相同的名称,或尽可能接近。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值