wordpress功能集成(三):基础知识-wordpress过滤器

前一篇文章已经将了wordrpess钩子,过滤器和同样重要,也是插件开发的一个重要接口,过滤器原理跟钩子差不过,只不过功能不一样,“动作钩子”我之前面加个动作,是因为过滤器其实也叫"过滤器钩子"(filter hooks)。动作钩子功能更多的偏向于执行一系列函数,而过滤器的功能是用来在输出一个变量给你一次修改它的机会。

与动作钩子相对应,过滤器基本函数也有两个:apply_filters()\add_filter,这些个函数都位于wp-include/plugin.php文件中。

  1. <?php
  2.     apply_filters($tag,$value);
  3.     //$tag  必需、你想创建的过滤器的名称   
  4.     //$value 必需,挂在这个过滤器可以修改的值(参数)   
  5.     //这两个参数是必须的,后面还可以带参数可道官网查看   
  6. ?>
  1. <?php
  2.     add_filter($tag,$function_to_add,$priority,$accepted_args);
  3.     //$tag 必需,钩子名   
  4.     //$function 必需,调用的函数   
  5.     //优先级   
  6.     //接受参数数量,默认1   
  7.     //需要注意的是,用add_filter添加的过滤器必须要有个返回值   
  8. ?>

apply_filters()函数也是创建并执行一个过滤器,和动作的参数一样,不过它的两个参数都是必需的,因为过滤器的功能是改变变量的值,所以必需传递一个或多个变量。add_filter()往钩子上面挂函数,这些函数必需有个返回值,如果给你修改个参数,然后改没了那是要报错的。
也就是说一个变量如果提供了修改过滤器,那么在输出之前,你可以通过函数再修改它N次。这个最常见的应用应该是seo插件了,通过过滤器来修改页面的信息。
这里再通过一个简单的实例来说明过滤器,以后的教程中再提供几个实例应用。
好吧,那我们也来修改一下网站的title信息。输出title一般都使用了函数wp_title();这个函数位于wp-includes/general-template.php文件第528行。我们查看函数,前面那一大截都是些判断,用来判断当前是什么页面,当前页面标题是什么。看到609行有代码:

  1. $title = apply_filters('wp_title', $title$sep$seplocation);

然后这一句的后面就是判断要不要输出了。这里创建并执行了一个名为wp_title的过滤器,然后传递3个参数,$titile就是标题,$sep就是标题的前面或后面截个字符,比如“|”,$seplocation决定字符$sep(“|”)显示在标题左边还是标题右边。这里apply_filers虽然传递了3个参数,但是注意了,主要的是修改$titile这个变量,后面两个是附加提供的参数,一般让你修改的时候还可以使用那两个参数,虽然他传递了3个参数,但是我们的返回值只能是一个,问?函数能返回3个值吗?

下面往主题functions.php文件中添加下面代码来修改$titile信息

  1. add_filter('wp_title','custom_title',10,3);
  2. function custom_title($title,$a,$b){
  3.     if$b === 'right' ){
  4.         $title = '阿树工作室'.$a;
  5.     }else{
  6.         $title = $a.'阿树工作室';
  7.     }
  8.     return $title;
  9. }

ok咧。就这样,就成功修改了title值,这一篇可能只有一个实例,也许讲的不够细,如果有地方有疑问,你可以查看前一篇,应为动作钩子和过滤器钩子很多地方都一样。
过滤器钩子也有其它函数,例如:has_filter() current_filter() merge_filters() remove_filter() remove_all_filters()...要想继续深入,还是去官网查看

本篇教程之前的几篇教程是

本篇教程之后的几篇教程是

没有找到你要找的内容?你可以通过搜索你要找的内容,或者给我们留言。

已有10条评论

  1. 刘振
    刘振 : 回复

    燕尾蝶提的问题还没有改正,希望博主改正

    • 阿树工作室
      阿树工作室 回复刘振: 回复

      邪了,,已改正

  2. 兆前
    兆前 : 回复

    能讲讲后面的两个参数么?优先级……

  3. mushu
    mushu : 回复

    有点设计模式额意思。

  4. 燕尾蝶
    燕尾蝶 : 回复

    实例代码的第6行:

    $title = $b.'阿树工作室';

    应为:

    $title = $a.'阿树工作室';
    • 阿树工作室
      阿树工作室 回复燕尾蝶: 回复

      还真是。。thank you…

  5. yj
    yj : 回复

    添加了该函数后没什么变化,custom_title里传入的参数是apply_filters后面的那三个值吗

    • 阿树工作室
      阿树工作室 回复yj: 回复

      是的。。。

  6. winsenes
    winsenes : 回复

    讲的很透彻,看了2遍才看懂,谢谢

  7. fengk
    fengk : 回复

    Dont call me, I will call you

发表评论