WordPress插件开发之Filter Reference

3 2

在WordPress中,Action能在指定位置执行指定的动作,而Filter则能将WordPress程序产生的数据进行“过滤”,达到“偷梁换柱”的目的。

简单范例

WordPress的登录页面相信大家并不陌生(见此)。中间一个WordPress Logo,链接指向 http://wordpress.org/ ,但对于一个商业应用的站点来说,我们可能希望点击它以后链接至自己的首页,如 http://wpceo.com/。对于一般的程序,我们可能要去改动它的源代码(也就是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的链接“偷换”为wpceo.com的链接了。

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。这里不做过多解释,请参见关于Action的详细说明

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功效。

更多的常见Filter我们将在遇到具体问题时具体解析,也欢迎大家继续关注WPCEO的后续文章。

分类:WordPress开发 | 标签:, ,

Leave a Reply

Your email address will not be published. Required fields are marked *