切换注册

登录

忘记密码 ?

切换登录

注册

| 2015-06-14

初识Wordpress 钩子机制:do_action(),add_action()

字数 2301 · 预计阅读时间 8分钟
阅读 3,176 ·   2 张图片

Wordpress 钩子

WordPress 中有一种叫挂勾的机制,在官方文档中他们被称为“Hooks, Actions and Filters”,单纯从字面理解就是“挂钩/钩子,动作/执行操作,过滤器”。

允许开发者通过“插件”把一些自定义的功能“挂载”到 WordPress 当中。也就是说,在程序运行至某一个环节时,去调用执行“插件”中的一些函数。当然,如果不在插件里实现,我们也可以在主题模版文件下,将其添加到functions.php文件中。

这里我们列出一些相应的wordpress内置函数,他们都是这种挂钩机制的组成部分,根据实际需求在一些想实现的功能中使用。

一.先列举相关函数

Filter Functions
过滤函数

has_filter()
add_filter()
apply_filters()
apply_filters_ref_array()
current_filter()
remove_filter()
remove_all_filters()
doing_filter()

Actions Functions
动作函数

has_action()
add_action()
do_action()
do_action_ref_array()
did_action()
remove_action()
remove_all_actions()
doing_action()

Activation/Deactivation/Uninstall Functions
激活/注销/卸载

register_activation_hook()
register_uninstall_hook()
register_deactivation_hook()

二.初步了解

暂时我们只需要知道如上所罗列的函数有三种类型即可:过滤,动作,激活/注销/卸载。

我们先举一个简单的例子,来直观感受这套机制的一点点优势。

了解一个WordPress 函数:

do_action()(执行动作)

他的语法如下:

do_action( $tag, $arg… );

我们看到,该函数名为do_action,参数有两项,分别是$tag和$arg:

$tag:(数据类型:字符串)(必须)要执行的动作的名字。

$arg:(数据类型:混合)(可选)额外的参数,会被传到调用的函数里,可以添加无限个。

另外说明下,do_action函数没有返回值,至于什么是函数返回值的问题,不了解的朋友需要补齐PHP函数部分的基础课程。

三.简单范例

我们都知道,wordpress的模版主题我们可以任意折腾,这也是wordpress好玩的地方。模版文件包括:header.php,index.php,footer.php,sidebar.php,404.php,single.php,page.php,functions.php,style.css等等,每套模版根据不同的功能需求和设计需求会有文件数量和命名上的差异。

之所以讲这个是为了告诉大家,我们这个例子会写在如上的某一个文件中。

比如,我们想在网站头部显示一段文字内容,那么我们可以打开文件 header.php,然后找到要显示这段内容的位置写入如下代码:

do_action( 'mytext' );

这样就ok了,有人讲这样多蠢啊,为何不直接写上内容或者echo一下,所以我要说,这仅是为了演示该功能的执行原理,实际使用中会有更具实用价值的方式。

继续。然后我们打开文件 functions.php,一般模版中都会有这么一个文件,用来存放我们为主题编写的一些自定义函数(什么是自定义函数?就是相对于wordpress官方提供给我们的内置函数之外,我们为了满足实际需求自行编写的函数就是自定义函数,这个自定义函数是相对于wordpress内置函数而言的)。

我们写入如下代码:

function textfunc(){echo '要输出的文本';}add_action( 'mytext', 'textfunc' );

这段代码有两部分,一部分是我的自定义函数 textfunc(),他实现了一个输出功能,另一部分就是我们上文提到的 add_action()函数,它有两个参数,一个是我们在do_action()里面缩写的参数名,一个是我们的自定义函数名。

我们再看下图来加深理解。

未标题-1

也就是说函数do_action里面的参数“mytext”是我们自己随意命名的,它像一个标记一样。因为我们可能会在整个模版中写很多do_action(),将它们放置于不同的位置,页头,页脚,文章列表或是其他任何我们需要放置的地方。

然后我们又编写了一段可以输出内容的函数textfunc(),我们想把这个函数在页头我们放置do_action()的位置上显示,于是我们使用了一个add_action()函数,add_action的第一个参数就是我们do_action()的参数,add_action()第二个参数便是需要执行的textfunc()函数。

例子就这样举完了。很简陋,甚至没有太多实际意义,但是它可以让我们很方便的理解钩子机制的一项简单功能,了解它的原理。

其他更高级的使用,我们会在后面的内容中提供。

add_action正式点的格式如下:

add_action( $tag, $function, $priority, $accepted_args );

解释:

$tag – 你的函数要执行的钩子名称。
$function – 要调用的函数名。
$priority – 一个表示动作调用顺序的整数,默认是10。数字越小,这个函数越早被调用,因为你可能要在同一个钩子上挂载好几个动作。
$accepted_args – 动作钩子要传递给你的函数的参数个数。默认只有一个参数。

发表您的高见