操作环境
操作系统信息:
master@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial
WordPress 信息:
主程序版本:WordPress 5.3.2
主题及版本:Twenty Sixteen(版本:2.0, 由WordPress团队开发)
add_action 函数使用形式
<?php add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 ); ?>
add_action 函数作用
挂载函数到一个特定的动作。
add_action 函数参数解析
- $tag:
该参数是必须参数,string 类型。$tag
是 $function_to_add
需要挂载到的动作的名称。
- $function_to_add:
该参数是必须参数,callable 类型,$function_to_add
是需要唤起的函数的名称。
- $priority:
该参数是不必须参数,int 类型,$priority
指的是函数的优先级,数字越小则优先级越高,优先级越高的会比优先级低的先执行。若挂载到同一个动作钩子的函数优先级相同,则按照先后顺序,依次执行。如果不设置 $priority
参数,则使用 10 为默认的优先级。
为了验证 add_action 优先级参数的效果,我们可以编写以下的代码。
首先,不使用优先级(默认优先级都为 10):
add_action("wp_footer", "zkf_first5"); function zkf_first5() { echo "<p style='color:red'>First</p>"; } add_action("wp_footer", "zkf_second5"); function zkf_second5() { echo "<p style='color:red'>Second</p>"; }
此时的运行结果如图 1 所示:
若加上优先级,使 zkf_second5()
函数的优先级比 zkf_first5()
函数的优先级高,即:
add_action("wp_footer", "zkf_first5", 2); function zkf_first5() { echo "<p style='color:red'>First</p>"; } add_action("wp_footer", "zkf_second5", 1); function zkf_second5() { echo "<p style='color:red'>Second</p>"; }
则此时的运行结果如图 2 所示:
- $accepted_args:
该参数是不必须参数,int 类型。$accepted_args
用于指定可以向函数 $function_to_add
传入的参数的个数,默认值为 1. 如果我们在这里给 $accepted_args
指定了一个值,假设指定为 3, 那么在我们定义函数 $function_to_add
的时候就需要为其传入 3 个参数。但是,参数的个数以及各个参数的含义并不是随便指定的,还需要结合函数所挂载的动作钩子来确定。例如,我们要将一个函数挂载到 save_post
这个动作钩子上,那么我们就可以在 WordPress Developer Resources (https://developer.wordpress.org/) 或者 Google 中搜索 “save_post” 就可以检索到如下页面:
https://developer.wordpress.org/reference/hooks/save_post/
在其中我们可以找到如下样例:
do_action( 'save_post', int $post_ID, WP_Post $post, bool $update )
由此,我们可以知道,save_post
这个动作钩子最大支持传入 3 个参数,从左到右的 3 个参数的含义依次是 $post_ID
、$post
和 $update
.
当然,不联网也可以知道上述内容,在 WordPress 的源码文件 wp-includes/post.php
中,搜索 “save_post”, 可以找到如下内容:
/** * Fires once a post has been saved. * * @since 1.5.0 * * @param int $post_ID Post ID. * @param WP_Post $post Post object. * @param bool $update Whether this is an existing post being updated or not. */ do_action( 'save_post', $post_ID, $post, $update );
由上述信息,我们也可以获知关于 save_post
所要求的参数的信息。当然,在可以传入 3 个参数的情况下,我们可以只使用前两个或者第一个参数,不使用的参数可以直接空着。
References:
[1]. add_action() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/add_action/
[2]. zh-cn:函数参考/add action « WordPress Codex
https://codex.wordpress.org/zh-cn:函数参考/add_action
EOF