首页/wordpress/WordPress-Hooks机制之apply_filters()功能用法

WordPress-Hooks机制之apply_filters()功能用法

玩过wordpress开发的朋友,无一不感叹wordpress的强大,特别是wordpress Hooks(钩子),之前我们已经介绍过动作钩子、以及过滤钩子的用法,今天给大家介绍下apply_filter()函数,我们暂且称之为函数,也许可能不够准确,虽然它与钩子息息相关,只是为了更好的说明白问题。

apply_filters( string $tag, mixed $value )

  • 用法:可以放置于wordpress主题相关任何PHP文件中、插件等、总之很强大
  • $tag,字符串,过滤钩子的名称
  • $value,混合类型,被应用到传递给过滤钩子回调函数的值(这句也许难以理解,看到例子就很容易理解了)
  • $var(可选),混合类型,额外的参数,一起被应用到传递给过滤钩子回调函数的参数
  • 返回值,被与之绑定的所有过滤钩子回调函数处理后的值

功能

  • 新建一个名为$tag的过滤钩子,并传递参数,如$value,或者额外的参数
  • 如果指定的$tag(钩子名称),没有与之绑定的回调函数进行处理的话,那么直接返回$value
  • 调用所有绑定到$tag(钩子名称)的回调函数
  • 所传递的参数,可以是类、对象、数组、字符串等
OK,暂时先了解下即可,也许有点难以理解,看完实例后,相信聪明的你,肯定可以弄明白。

实例一、


$test = apply_filters('single-test','这是一个字符串'); 
var_dump($test);//利用var_dump()查看,返回的$test的类型与值
//以上两行代码,我们假定放置于single.php文件内
add_filter('single-test','ThemeHello_test_filter',10,1);
function ThemeHello_test_filter($test){
	return $test."--修改后的值";
}
//以上4行代码,我们假定放置于functions.php文件内

实例二、


$test = apply_filters('single-test','这是一个字符串'); 
var_dump($test);
add_filter('single-test','ThemeHello_test_filter',10,1);
function ThemeHello_test_filter($test){
	return $test."--修改后的值";
}
add_filter('single-test','ThemeHello_test_filterB',10,1);
function ThemeHello_test_filterB($test){
	return $test."--再次被修改";
}
//注意这里,我们为single-test过滤钩子,绑定了2个回调函数
//var_dump($test)最终值为,这是一个字符串--修改后的值--再次被修改,有点类似于递归处理的感觉
//你可以通过指定add_filter的第三个参数,来指定回调函数运行的优先级,数字越小,越先执行

实例三、


$test = apply_filters('single-test','这是一个字符串',array("username"=>"hellokitty")); //注意,我传递了一个数组
var_dump($test);
add_filter('single-test','ThemeHello_test_filter',10,2);//注意add_filter()的第四个参数,由1变2
function ThemeHello_test_filter($test,$arr){
	$k = "";
	$v = "";
	foreach ($arr as $key => $value) {
		$k .=$key;
		$v .=$value;
	}
	return $k."--".$test."--".$v;
}

实例四、


$test = apply_filters('single-test','这是一个字符串',$post); //传递了WordPress内置对象$post
var_dump($test);

add_filter('single-test','ThemeHello_test_filter',10,2);
function ThemeHello_test_filter($test,$post){
	global $post;
	return $test."--".$post->post_name;
}

实例五、


$test = apply_filters('single-test',$post,'上个例子这个参数是对象'); //所需处理的值传递wordpress内置对象$post
var_dump($test);
add_filter('single-test','ThemeHello_test_filter',10,2);
function ThemeHello_test_filter($post,$test){
	global $post;
	return $post->post_name."=====".$test;
}

总结

如果你想玩转wordpress,那么钩子机制是必须要懂的,也是wordpress的核心。如果想成长的话,务必手敲代码,当然如果你想仔细研究的话,那么建议去读下wordpress HOOK的源码,最后给出do_action与add_action、add_filter相应用法的链接
收藏:

相关资讯