详解什么是钩子,wordpress钩子的作用和基础用法基础攻略

很多人在看别人的插件、主题制作的时候都会提到动作钩子、过滤器什么的,本人当初看的时候也不知道钩子是啥,经过N久的学习慢慢的就明白了,今天我说说什么是钩子。英文叫hook--翻译:挂钩,吊钩。现在通过实例来说一下什么事wordpress钩子,一般的主题在header.php中都有会加上函数wp_head(),有的还会在footer.php中添加wp_footer()函数,而且很多插件都会提醒如果主题代码中没有wp_head()函数可能无法使用插件(要想搞清楚一个函数是干嘛的,你可以百度一下,一般都会有人翻译,如果懂英语的话去官网wordpress.org去搜索一下,那里有权威介绍)。以wp_head()函数为例:

  1.  php wp_head(); 
  2.         该函数位于wp-includes/general-template.php文件的1577行,看到这个函数的定义:
  1. function wp_head() {   
  2.     do_action('wp_head');   
  3. }  

       这个函数就简单的一句do_action('wp_head') , 这个do_action()函数可以解释为:执行一个动作,这里执行一个叫名称为wp_head的动作,里面的参数wp_head并不是函数,而仅仅是一个名称。我们把这个动作叫做动作钩子,这个名为wp_head动作可以包涵很多函数的,我们可以自定义一些函数让它归属于wp_head动作,可以形象的说成是把一个函数挂在这个动作上哦。。哈哈。。这是我的理解。。。 do_action()函数介绍如下:

  1.     do_action($tag, $arg);   
  2.     //$tag  必需、你想创建的动作钩子的名称   
  3.     //$arg  传递给已有的动作钩子的值   

       准确的说do_action()函数是创建一个动作并执行它,因为这个要执行的动作并不需要像变量一样需要先申明明,do_action('wp_head')就是直接创建一个叫wp_head的动作然后执行它。实例:

  1.  
  2.     do_action('kutailang');   
  3.     //创建一个叫kutailang的动作并且执行,然后你就可以往这个钩子上挂函数了。。   

现在创建了这个动作,但是这个动作并没有包含任何函数,所以执行这个空的动作就不会执行任何函数,所以我要再往这个动作上挂一个函数,使用add_action()函数可以往动作钩子上挂函数,add_action()的介绍:

  1.     add_action( $tag, $function_to_add, $priority, $accepted_args );   
  2.     //$tag  参数必需,动作钩子的名称   
  3.     //$function_to_add  参数为必需,要执行的函数   
  4.     //$priority  参数为int(整数),数字越小越先调用   
  5.     //$accepted_args  参数为int(整数),函数需要的参数个数,默认1;   
  6.  

       我们的实例需要添加的代码:

  1.     add_action('kutailang','kutailang_echo',88);   
        //把函数kutailang_echo挂在名为kutailang动作上   
        //下面定义函数kutailang_echo   
        function kutailang_echo(){   
            echo '我是苦太狼啊
    ';   
        }   

     

       这样执行 do_action('kutailang')的时候就会执行kutailang所包含的所有函数。前面说到的wp_head()函数执行了名叫wp_head的动作,很多插件都需要在页面加载js和css文件或代码,就需要用到这个函数在网页的头部来输出相应的代码。为什么不用wp_footer函数来输出js代码呢,js不是放在页面底部更好吗?因为一般的主题都有wp_head()函数,但是wp_footer函数就不一定了。与动作钩子相关的函数不仅仅是这两个,还有has_action() do_action_ref_array() remove_action() remove_all_action()想了解的可以到官网去搜索。

过滤器钩子

过滤器钩子可以让你改一些东西的值,过滤器回调函数会接受一个参数,这就是当前的值。还记得那个用来调用文章内容的 the_content() 函数吧,这个函数就提供了一个 the_content 过滤器。

给 the_content 钩子添加一个函数,这个函数需要接收一个参数,这个参数就是当前的值。

 

//文章内容全部链接新窗口打开
function Bing_autoblank( $content ){//$content 变量就是文章内容,因为其它过滤器也要过滤,所以这个内容可能是经过其它函数过滤的
  $content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank"
  return $content;//必须要把过滤后的内容返回回去,否则值就丢了
}
add_filter( 'the_content', 'Bing_autoblank' );

钩子原理

事实上,在调用 add_action() 和 add_filter() 的时候,只是向 $wp_filter 全局变量添加了一个数组元素,还要说的就是动作和过滤器是公用的一个全局变量,也就是说,过滤器和动作是不能重名的。

当调用 do_action() 的时候,会查找 $wp_filter 全局变量中都有哪些添加到此动作的函数,循环执行即可。

apply_filters() 比 do_action() 多了一个步奏,就是每次调用函数时还要接收这个函数的返回值,最后把经过多次过滤的值返回出去,供使用。

获取当前钩子列表
WordPress 的动作和过滤器是插件机制的核心部分,允许你在特定的地方主动添加自己需要执行的动作,一般使用 add_action() 和 add_filter() 函数挂载函数。

这些钩子被储存在 $wp_filter 全局变量里,所以,要获取钩子列表,可以直接获取 $wp_filter 全局变量

<pre><?php var_dump( $GLOBALS['wp_filter'] ); ?></pre>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值