插件开发全攻略(06)---WordPress插件Filter
Filter是一组使得你的插件可以插入来修改文字的函数。被修改的文字通常是要插入到数据库或者显示给终端用户看的。
WordPress Filter允许你修改几乎任何类型的显示文字,而且其功能十分强劲。通过Filter你可以修改文章,feed,怎么样在评论中的作者,还有很多,很多。
为了说明WordPress Filter的用处,我们会继续在已经存在的Devlounge Plugin Series代码上工作。
添加一个内容Filter
有一个你可以使用的很Cool的Filter是’the_content’。这个filter在文章内容被显示在浏览器之前执行。我们将要添加一行文字到文章内容的末尾。
根据WordPress插件API,添加一个filter的格式为:add_filter('hook_name','your_filter',[priority],[accepted_args]);
我们只需要往DevloungePluginSeries类中添加一个函数。让我叫它addContent。1
2
3
4
5
6
function addContent($content=''){
$content.="Devlounge Was Here";
return $content;
}
在上面的代码中,发生了以下的事件:
- 上述函数会接受一个参数叫做content
- 如果调用时不传递参数,那么content会设定为默认值(空串)
- 参数content被附加了一行我们自定义的文本
- 然后重新返回了content
在向类添加了上述函数后,下一步要做的就是将它插入到’the_content‘中,使得这个函数被调用。1
2
3
4
5
6
7
8
9
//Actions and Filters
if(isset($dl_pluginSeries)){
//Actions
add_action('wp_head',array(&$dl_pluginSeries,'addHeaderCode'),1);
//Filters
add_filter('the_content',array(&$dl_pluginSeries,'addContent'));
}
在这段代码的第6行你可以看到,添加了一个叫做’the_content‘的filter,通过这个filter,我们的函数’addContent‘会被调用。
如果插件启用,当一篇文章被显示的时候,文本“Devlounge Was Here”将会被显示到文章的末尾。
添加一个作者Filter
我在这里要展示另一个使用Filter的例子,我要展示一下怎么操纵显示一个评论的作者。我这里只是简单地让所有的作者名字都用大写显示。
我们只需要往DevloungePluginSeries类中添加一个函数。我们叫它authorUpperCase。1
2
3
4
5
function authorUpperCase($author=''){
return strtoupper($author);
}
在上述代码中,做了这些事情:
上述函数会接受一个参数,叫做author
如果没有参数,会被设定成默认值
author字符串会以大写的形式返回
在函数被添加到类后,下一步是将它插入到’get_comment_author‘中使它被调用。1
2
3
4
5
6
7
8
9
10
//Actions and Filters
if(isset($dl_pluginSeries)){
//Actions
add_action('wp_head',array(&$dl_pluginSeries,'addHeaderCode'),1);
//Filters
add_filter('the_content',array(&$dl_pluginSeries,'addContent'));
add_filter('get_comment_author',array(&$dl_pluginSeries,'authorUpperCase'));
}
像你在第7行看到的,我们添加了一个’get_comment-author‘ filter,然后,我们的函数’authorUpperCase‘会被调用。
如果插件已经启用,并且一篇日志的评论是可见的,那么评论的作者名字会以大写显示。
应用Filter
使用Filter可以做的更强大的是,你可以动态地调用他们。没有必要每次运行都添加一次filter。你可以在任何时候在你的代码里面调用filter。
apply_filters的格式是:apply_filter(‘filter name’,’you text’);
你会在这个系列的后续文章中看到apply_filters的例子。