A-A+

wordpress网站制作:钩子Filter Reference

2015年02月09日 WordPress 暂无评论 阅读 2,515 views 次

在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

标签:

给我留言