介绍50个 WordPress 动作挂钩

往前走,一片诱人的新绿尽收眼底,那是满池的新荷。荷叶有的平展着圆盘浮在水面上;有的绿伞般在空中摇曳;有的兜着水珠把阳光反射得灿烂夺目;有的长得非常高,却未展开叶面,勇敢地挺立着。荷花则多半含苞待放,白中透粉的一朵朵花儿,活像一个个花仙子借着微风,在池中裙袂飞扬,翩然起舞。
本文是《50个 WordPress 动作挂钩》专题的第 1 篇,共 7 篇:
  • 介绍50个 WordPress 动作挂钩
  • 介绍50个 WordPress 动作挂钩(1-10)
  • 介绍50个 WordPress 动作挂钩(21-30)
  • 介绍50个 WordPress 动作挂钩(11-20)
  • 介绍50个 WordPress 动作挂钩(31-40)
  • 介绍50个 WordPress 动作挂钩(41-50)
  • 介绍50个 WordPress 动作挂钩(总结)

WordPress 之所以能成为世界上最受欢迎的网页内容管理系统,原因就在于它的高度灵活性和可塑性,而这种灵活性和可塑性正是由“挂钩”(Hooks)简洁宜用的结构所决定的。可以说,没有过滤挂钩(Filter Hooks)和动作挂钩(Action Hooks), WordPress 就不会具有这样高的可拓展性,我们也不可能会有如此多的 WordPress 插件和主题可供选择。

在本系列好代码教程中,我将会向你详细介绍 WordPress 中的动作挂钩。在整个好代码教程中,我们将会涵盖有关动作挂钩几乎所有方面的内容。

  • 在第一部分,也就是在本文中,我们将会逐步了解到 WordPress 动作挂钩:什么是 WordPress 动作挂钩,以及怎样使用 WordPress 的7大核心动作挂钩。
  • 在接下来的五个部分,我们将会接触到大量有关 WordPress 动作挂钩的实例。而在每一个部分,我们都会了解到10个挂钩的优点和它们的使用条件,并通过一些实例来进一步掌握它们。
  • 在本系列课程的最后,我们将会进行一次课程回顾与总结,包括所举的50个例子。

这个学习过程将会非常漫长,所以,请做好准备。

什么是 WordPress 动作挂钩

在 Codex ( WordPress 法典)中,给出的定义如下:

动作挂钩由 WordPress 中的特定事件激活,例如:发布一篇文章、更改主题,或者是显示管理控制界面(administration screen)。动作挂钩是在插件(或主题)中定义的自定义PHP函数,即被设定为回应某些特定事件。

所以,从本质上来说,动作挂钩由某个 WordPress 事件激活,可以在事件之前或之后运行。动作挂钩只是WordPress的两种挂钩之一,另一个则是我们之前讲到的过滤挂钩(Filters)——如果想了解更多有关 WordPress 过滤挂钩的内容,请参阅《50个 WordPress 过滤挂钩》一文。

在WordPress中使用动作挂钩

定义动作挂钩只是最简单的一步,幸运的是,学会如何创建和使用动作挂钩也是非常简单的。首先,让我们来看看怎样将相关函数挂载到动作挂钩上,怎样创建新的动作挂钩,清除现有的挂钩和其他在 WordPress core中与动作挂钩相关的函数。

将一个函数挂载到一个动作挂钩上

其中最简单的函数也许就是 add_action():它可以将某个函数挂载到我们即将使用的动作挂钩上

1
2
3
4
5
<?php

add_action( $hook_name, $function_name, $priority, $arguments );

?>

<?php add_action( $hook_name, $function_name, $priority, $arguments ); ?>

让我们来看看这些参数意味着什么:

  • $hook_name 是所使用的动作挂钩的名称。
  • $function_name 是函数名。
  • $priority 是我们规定的一个整数,用来设置函数在此挂钩中的优先级别。
  • $arguments 是函数所使用的和动作挂钩同时所允许的参数个数。

让我们来看一个简单的例子:

1
2
3
4
5
6
7
8
9
<?php

add_action( 'add_meta_boxes', 'my_function', 10, 2 );

function my_function( $post_type, $post ) {
    // do stuff with $post_type and $post
}

?>

<?php add_action( 'add_meta_boxes', 'my_function', 10, 2 ); function my_function( $post_type, $post ) { // do stuff with $post_type and $post } ?>

很简单,对吧?

从动作挂钩中清除原有函数

我们可以使用以下两个函数清除动作挂钩中的原有函数: remove_action() 和 remove_all_actions()

首先来看一看它们是如何使用的:

1
2
3
4
5
6
7
8
9
<?php

// remove_action( $hook_name, $function_name, $priority );
remove_action( 'login_enqueue_scripts', 'some_function', 10 );

// remove_all_actions( $hook_name, $priority );
remove_all_actions( 'wp_enqueue_scripts', 10 );

?>

<?php // remove_action( $hook_name, $function_name, $priority ); remove_action( 'login_enqueue_scripts', 'some_function', 10 ); // remove_all_actions( $hook_name, $priority ); remove_all_actions( 'wp_enqueue_scripts', 10 ); ?>

remove_action() 有三个参数:挂钩名称、要清除的函数名和使用 add_action() 时设置的优先级别。 remove_all_actions() 函数则没有$function_name 参数,因为它会清除动作挂钩中的所有函数。

创建一个动作挂钩

如果你想要开发 WordPress插件或者主题的话,一个值得推荐的做法是在你的代码中创建一些挂钩,这样其他的开发人员就可以继续扩展你的插件和主题了。而要做到这一点,我们需要两个函数:do_action() 和 do_action_ref_array()。让我们来看看第一个函数是如何运作的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );

/*
 * Usage:
 * 
 * add_action( hook_name, my_function )
 * 
 * function my_function( $arg1, $arg2 ) {
 *     // do stuff with $arg1, $arg2 and so on
 * }
 * 
 */

?>

<?php do_action( $hook_name, $arg1, $arg2, /* ... */ $argN ); /* * Usage: * * add_action( hook_name, my_function ) * * function my_function( $arg1, $arg2 ) { * // do stuff with $arg1, $arg2 and so on * } * */ ?>

正如你所看到的那样,这个函数实际上可以包含无限多的参数,你可以根据需要来定义任意多的参数。如果你想在一个数组中保存这些参数,那么你还需要使用第二个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

$args = array( $arg1, $arg2, /* ... */ $argN );

do_action_ref_array( $hook_name, $args );

/*
 * Usage:
 * 
 * add_action( hook_name, my_function )
 * 
 * function my_function( $args ) {
 *     // do stuff with $args[0], $args[1] and so on
 * }
 * 
 */

?>

<?php $args = array( $arg1, $arg2, /* ... */ $argN ); do_action_ref_array( $hook_name, $args ); /* * Usage: * * add_action( hook_name, my_function ) * * function my_function( $args ) { * // do stuff with $args[0], $args[1] and so on * } * */ ?>

检索动作挂钩被调用的次数

如果你想知道一个动作挂钩被调用的次数,你可以使用一个简单方便的函数来统计:

1
2
3
4
5
6
7
8
9
10
<?php

function tuts_foo() {
    $action_count = did_action( 'some_action_name' );
    if ( 1 === $action_count ) {
        // run code if 'some_action_name' has been fired only once
    }
}

?>

<?php function tuts_foo() { $action_count = did_action( 'some_action_name' ); if ( 1 === $action_count ) { // run code if 'some_action_name' has been fired only once } } ?>

正如你看到的那样,这个函数中唯一的参数就是动作挂钩的命名。

检查是否存在指定的动作挂钩

假设你正在为一个流行的 WordPress 插件开发其他的扩展插件,你首先需要检查用户是否已经安装了这个 WordPress 插件。(毕竟,如果这个插件没有安装并激活的话,那么你后来开发的插件也将无法使用。)

为了进行这项检查,你可以使用 has_action() 函数以确定这个插件的动作挂钩是可以访问的:

1
2
3
4
5
6
7
8
9
10
<?php

if( has_action( 'some_popular_plugin_action' ) {
    add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
} else {
    wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
    // CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
}

?>

<?php if( has_action( 'some_popular_plugin_action' ) { add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' ); } else { wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' ); // CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it. } ?>

就像 did_action() 函数,has_action() 函数只有一个参数:动作挂钩的名称。

小结

现在,我们已经介绍完了有关创建和使用动作挂钩几乎所有的基本内容,接下来的五篇长文将涉及到非常多的实例。我们将选出其中有代表性的50个例子来讲解,如果你有兴趣的话,可以在 WordPress core 中找到数以百计的例子。

我希望你会喜欢我创建并分享的这一系列课程。如果你能为这个课程推荐更多更好的动作挂钩,或者你需要更多例子的话,请告诉我,并在下面的评论区分享你的看法。如果你喜欢这些课程,别忘了分享哦!

让我们下节课再见!

  • 原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-an-introduction--cms-21577
  • 由 stonetan@WordPress大学 原创翻译,未经允许,禁止转载和采用本译文。

以上就是介绍50个 WordPress 动作挂钩。人生就应该:尽己力,听天命。无愧于心,不惑于情。顺势而为,随遇而安。知错即改,迷途知返。在喜欢自己的人身上用心,在不喜欢自己的人身上健忘。更多关于介绍50个 WordPress 动作挂钩请关注haodaima.com其它相关文章!

您可能有感兴趣的文章
WordPress站点Gravatar头像前后台不显示的如何解决办法

WordPress主题需要支持https吗?WordPress站点如何如何实现https?

WordPress站点的页面/标签/分类URL地址如何添加.html?

WordPress站点更换了域名后数据库应该如何操作替换新旧域名?

WordPress安装在主机空间的什么目录里面?根目录在哪里?