apply_filters(...) 实际上在 WordPress 中做了啥?
Posted
技术标签:
【中文标题】apply_filters(...) 实际上在 WordPress 中做了啥?【英文标题】:What does apply_filters(...) actually do in WordPress?apply_filters(...) 实际上在 WordPress 中做了什么? 【发布时间】:2011-01-17 06:40:52 【问题描述】:我试图了解 WordPress 中的一些功能,但我无法理解 apply_filters(...) 的实际作用。
有人可以举几个例子来帮我解决这个问题吗?
【问题讨论】:
太棒了:dev.themeblvd.com/tutorial/filters 请注意,apply_filters()
是一个令人难以置信的函数名称,因为它同时应用了过滤器 和 与目标函数挂钩的操作
@NabilKadimi,很好的建议,dev.themeblvd.com/tutorial/filters/#highlighter_604585,但是当这个函数不接受任何参数时(请点击链接查看我说的是哪个函数),$output 变量是如何改变的,正如他在下一个代码部分中描述的那样?
@RameshPareek 您的链接似乎没有按预期工作,请使用 Github gist。
对不起!请向下滚动到该页面上的示例 1:基础知识。
【参考方案1】:
apply_filters($tag, $value)
将“值”参数传递给每个“挂钩”函数(使用add_filter
)到指定的过滤器“标签”。每个函数对值进行一些处理并返回一个修改后的值以传递给序列中的下一个函数。
例如,默认情况下(在 WordPress 2.9 中)the_content
过滤器通过以下函数序列传递值:
【讨论】:
如果apply_filters($value)
似乎正在清除某个值,请记住回显任何您未使用的值...【参考方案2】:
在最基本的术语中,apply_filters 用于初始化过滤器钩子... add_filter 为已经创建的钩子分配一个新函数。
【讨论】:
对不起,这是错误的方法:apply_filters() 调用已经初始化的过滤器钩子,而 add_filter() 是创建过滤器钩子的调用。我知道你实际上是这个意思,但你的功能是错误的! apply_filters($tag,$value);允许您在代码中创建一个位置,然后您可以允许您传递的 $value 使用 add_filter(); 进行挂钩和修改;【参考方案3】:在考虑最受欢迎的答案和其他资源后,我正在收集以下内容:
$tag 似乎是钩子名称的同义词。 (这对我来说不是特别直观。) the_content 是“过滤器”类型的钩子示例。 the_content 挂钩由多个过滤器组成。 过滤器修改数据。他们基本上过滤数据库,在用户查看数据之前更改数据。 例如,apply_filters() 的一个常见用途是将 the_content 过滤器应用于 $content。在这种情况下,双重返回将转换为<p>
标签,笑脸将转换为图标等。
“the_content”是一个钩子,而“the_content()”是一个函数。
【讨论】:
【参考方案4】:迟到的答案
简短说明
apply_filters()
与 global $wp_filters
数组交互。基本上它只是检查当前过滤器(或钩子)是否附加了一个动作(/回调函数)然后调用它。
详细解释
当您将回调/操作附加到过滤器或挂钩时,您只需将回调名称添加到全局过滤器数组。然后,在代码(例如模板、核心或插件文件)中调用do_action()
或apply_filters()
时,WordPress 会搜索数组并调用回调。过滤器比钩子更特别的是,它返回值(用于进一步处理)而不是仅仅触发回调。总结一下:钩子是插入数据,过滤器是修改数据。
【讨论】:
以上是关于apply_filters(...) 实际上在 WordPress 中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章