介绍50个 WordPress 动做挂钩

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

在本系列教程中,我将会向你详细介绍 WordPress 中的动做挂钩。在整个教程中,咱们将会涵盖有关动做挂钩几乎全部方面的内容。web

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

这个学习过程将会很是漫长,因此,请作好准备。数组

什么是 WordPress 动做挂钩

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

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

因此,从本质上来讲,动做挂钩由某个 WordPress 事件激活,能够在事件以前或以后运行。动做挂钩只是WordPress的两种挂钩之一,另外一个则是咱们以前讲到的过滤挂钩(Filters)——若是想了解更多有关 WordPress 过滤挂钩的内容,请参阅《50个 WordPress 过滤挂钩》一文。wordpress

在WordPress中使用动做挂钩

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

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

其中最简单的函数也许就是 add_action():它能够将某个函数挂载到咱们即将使用的动做挂钩上post

  1. <?php
  2.  
  3. add_action( $hook_name, $function_name, $priority, $arguments );
  4.  
  5. ?>

让咱们来看看这些参数意味着什么:学习

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

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

  1. <?php
  2.  
  3. add_action( 'add_meta_boxes', 'my_function', 10, 2 );
  4.  
  5. function my_function( $post_type, $post ) {
  6.     // do stuff with $post_type and $post
  7. }
  8.  
  9. ?>

很简单,对吧?

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

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

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

  1. <?php
  2.  
  3. // remove_action( $hook_name, $function_name, $priority );
  4. remove_action( 'login_enqueue_scripts', 'some_function', 10 );
  5.  
  6. // remove_all_actions( $hook_name, $priority );
  7. remove_all_actions( 'wp_enqueue_scripts', 10 );
  8.  
  9. ?>

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

建立一个动做挂钩

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

  1. <?php
  2.  
  3. do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );
  4.  
  5. /*
  6.  * Usage:
  7.  * 
  8.  * add_action( hook_name, my_function )
  9.  * 
  10.  * function my_function( $arg1, $arg2 ) {
  11.  *     // do stuff with $arg1, $arg2 and so on
  12.  * }
  13.  * 
  14.  */
  15.  
  16. ?>

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

  1. <?php
  2.  
  3. $args = array( $arg1, $arg2, /* ... */ $argN );
  4.  
  5. do_action_ref_array( $hook_name, $args );
  6.  
  7. /*
  8.  * Usage:
  9.  * 
  10.  * add_action( hook_name, my_function )
  11.  * 
  12.  * function my_function( $args ) {
  13.  *     // do stuff with $args[0], $args[1] and so on
  14.  * }
  15.  * 
  16.  */
  17.  
  18. ?>

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

若是你想知道一个动做挂钩被调用的次数,你可使用一个简单方便的函数来统计:

  1. <?php
  2.  
  3. function tuts_foo() {
  4.     $action_count = did_action( 'some_action_name' );
  5.     if ( 1 === $action_count ) {
  6.         // run code if 'some_action_name' has been fired only once
  7.     }
  8. }
  9.  
  10. ?>

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

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

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

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

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

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

 

 

相关文章
相关标签/搜索