WordPress开发:WordPress动作钩子add_action参数解析

操作环境

操作系统信息:

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 所示:

图 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 所示:

图 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


荒原之梦网全部内容均为原创,提供了涵盖考研数学基础知识、考研数学真题、考研数学练习题和计算机科学等方面,大量精心研发的学习资源。

意见反馈 | 内容纠错 | 微信 | QQ | 公众号 | 知乎 | 微博 | 博客园 |CSDN | B 站 | 电子邮件
豫 ICP 备 17023611 号-1 | 公网安备 - 荒原之梦 豫公网安备 41142502000132 号 | SiteMap
Copyright © 2017-2024 ZhaoKaifeng.com 版权所有 All Rights Reserved.

Copyright © 2024   zhaokaifeng.com   All Rights Reserved.
豫ICP备17023611号-1
 豫公网安备41142502000132号

荒原之梦 自豪地采用WordPress