wordpress网站制作:钩子Filter Reference
在WordPress中,Action能在指定位置执行指定的动作,而Filter则能将WordPress程序产生的数据进行“过滤”,达到“偷梁换柱”的目的。
实例:
1、在插件下创建demo.php,放入以下内容
<?php
/*
Plugin Name:测试插件
*/
function my_the_content_filter($content) {
return $content . '(在文章内容后面添加一段内容)';
}
add_filter( 'the_content', 'my_the_content_filter' );
?>
2、启用插件后,所有文章底部都添加了“在文章内容后面添加一段内容”这段文字。
简单范例
WordPress的登录页面相信大家并不陌生。中间一个WordPress Logo,链接指向 http://wordpress.org/ ,但对于一个商业应用的站点来说,我们可能希望点击它以后链接至自己的首页,如 http://imdupeng.cn/。对于一般的程序,我们可能要去改动它的源代码(也就是hook)才能修改为自己所需的样式,而WordPress提供了简单的Filter,只要在Filter中加入自己的替换函数,就能替换WordPress原有的输出结果。
add_filter('login_headerurl','my_login_headerurl');
function my_login_headerurl($url){
return get_bloginfo('wpurl').'/';
}
通过这几句代码,我们就可以将登录界面的LOGO的链接地址指向为自己的博客首页。add_filter函数在login_headerurl这个Filter上执行自己的my_login_headerurl函数。my_login_headerurl的参数是原URL,由login_headerurl这个Filter提供(每个Filter都提供自己独特的参数),而我们的函数需要在这个函数结束时返回一个匹配值。在这里,我们将默认的wordpress.org的链接“偷换”为imdupeng.cn的链接了。
Filter接口函数解析
add_filter('filter_name','my_filter',$priority=10,$accepted_args=1);
Filter与Action的参数比较类似,filter_name 为系统提供的Filter,my_filter为自己的过滤函数,$priority为权重,$accepted_args为接受的参数。
remove_filter('filter_name','my_filter',$priority=10,$accepted_args=1);
删除该Filter。
apply_filters('filter_name',$arg);
执行某个Filter,$arg为需要传入的参数,可以为数个。
Filter与Action对比
Action是一种动作,这个动作不受太多的WordPress系统限制,你可以在这个Action上加载任何适当的函数。而Filter是根据插件需要,对WordPress系统进行修改,比如前文的范例,我们需要对一个URL进行修改,而修改后的结果也应当为一个URL。
$new_value = apply_filters('filter_this_value',$original_value);
do_action('do_something_here');
Action不需要返回值,也不一定需要传入参数,而Filter则必不可少,所以Filter应该格外需要注意Filter传入的参数个数以及原始参数值,并及时返回参数。
常见的Filter及简单应用
the_content:在single页面输出文章全文,可以应用格式化函数对其进行过滤。
the_excerpt:输出文章摘要,可以加入字数控制的Filter。
the_content_rss:在RSS输出中的全文,可以加入版权信息等。
the_title:HTML页面标题,可以对当前页面的title进行重写,达到SEO功效。
官方文档:
http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content