apply_filters(…)实际上在WordPress中做了什么?

我试图了解WordPress的一些function,但是我无法理解apply_filters(…)实际上做了什么。

有人能够用几个例子为我解决这个问题吗?

apply_filters($tag, $value)将'value'parameter passing给每个函数'hooked'(使用add_filter )到指定的filter'tag'中。 每个函数对该值执行一些处理,并返回一个修改后的值,以传递给序列中的下一个函数。

例如,默认情况下(在WordPress 2.9中), the_contentfilter通过以下函数序列传递值:

  • wptexturize
  • convert_smilies
  • convert_chars
  • wpautop
  • shortcode_unautop
  • prepend_attachment
  • do_shortcode

迟到的答案

简短的解释

apply_filters()global $wp_filters数组交互。 基本上它只是检查数组,如果当前filter(或挂钩)有一个动作(/callback函数)附加,然后调用它。

很长的解释

当您将callback/操作附加到筛选器或挂钩时,只需将callback名称添加到全局筛选器arrays即可。 然后,在代码中(例如模板,核心或插件文件)发生对do_action()apply_filters()的调用,然后WordPress通过数组search并调用callbackapply_filters() 。 filter比钩子更特别的是,它返回的值(进一步处理),而不是只发射callback。 所以总结一下:钩子是要插入数据的,而filter是要修改数据的。

以下是我在收集最受欢迎的答案和其他资源时收集的内容:

  • $标签似乎是钩子名称的同义词。 (这对我来说不是特别直观。)
  • the_content是“filter”types的钩子的一个例子。
  • the_content挂钩由多个filter组成。
  • filter修改数据。 他们基本上过滤数据库,在用户查看之前更改数据。
  • 例如,apply_filters()的一个常见用法是将$ contentfilter应用到$ content。 在这种情况下,双重返回将转换为<p>标签,笑脸将转换为图标等。
  • “the_content”是一个钩子,而“the_content()”是一个函数。

在最基本的术语中,apply_filters用于初始化一个filter钩子… add_filter为已经创build的钩子分配一个新的函数。