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。
function addContent($content=''){ $content.="<p>Devlounge Was Here</p>"; return $content; }
在上面的代码中,发生了以下的事件:
- 上述函数会接受一个参数叫做content
- 如果没有参数传递尽力,那么会设定默认值(空串)
- 参数content被附加了一行我们自定义的文本
- 然后重新返回了content
在向类添加了上述函数后,下一步要做的就是将它插入到’the_content’中,使得这个函数被调用。
//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。
function authorUpperCase($author=''){ return strtoupper($author); }
在上述代码中,做了这些事情,上述函数会接受一个参数,叫做author如果没有参数,会被设定成默认值author
字符串会以大写的形式返回在函数被添加到类后,下一步是将它插入到’get_comment_author’中使它被调用。
//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的例子。