apply_filters函数及其变量的说明


16

我正在通过“简化表单注册”插件中的示例来学习如何使用PHP构建html表单。

我在看这段代码:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

您能否解释一下发生了什么-函数的作用,为什么需要'simplr-reg-instructions'和'simplr-reg'?

为什么这行不能简单地是:

$form .= 'Please fill out this form to sign up for this site' ;

我已经阅读了函数参考,但仍然无法弄清楚。

Answers:


22

该行使用的是两个不同的功能,需要两个单独的解释。

__()

这是翻译功能。如果正确完成设置,它将转换预翻译字符串列表中的第一个参数。如果安装中的文件带有经过编译的翻译供该功能使用,它将使用它。当然,该插件必须打包自己的翻译,因此是第二个参数。simplr-reg告诉__()字符串的翻译'Please fill out this form to sign up for this site'应该在与之关联的翻译文件中'simplr-reg'(这是通过load_plugin_textdomain()功能在插件中更早完成的)。

然后该函数返回翻译。如果没有要返回的翻译(例如,当前语言没有经过编译的翻译,字符串没有针对该包的经过编译的翻译等),则返回原始输入。

因此,对于英文WordPress网站,__( 'This', 'simplr-reg' )其功能与相同'This'。要了解有关l10n(本地化)的更多信息,请在抄本中进行阅读:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters()

此功能允许您根据需要过滤插件使用的值。这是作为插件开发人员要掌握的主要概念之一。WordPress通过挂钩进行了扩展,这些挂钩基本上是访问点,可让您安排插件操作的执行时间和/或操纵WordPress使用的信息/数据等。

要处理数据(例如您所询问的代码片段),可以使用函数add_filter()。这是一个如何工作的基本示例:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

您可能会认识到第一个参数。与add_filter上面使用的相同。这是挂钩名称。第二个参数是过滤器回调。它必须是函数的有效回调(在此处了解有关回调的更多信息)。该行代码显示“ 'simplr-reg-instructions'执行挂接后,使用我提供的回调运行函数。” apply_filters()执行在其第一个参数中找到的钩子,本质上意味着“执行为此钩子注册的所有函数”。apply_filters然后将所有其他参数(在本例中为'Please fill out this form to sign up for this site')传递给该过滤器上的函数。因此,我上面使用的回调应如下所示:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

WordPress中有两种挂钩:过滤器(我们在这里使用的那种)和动作。两者之间的主要区别在于过滤器希望您返回某些内容,而操作则不会。因此,对于此过滤器,我上面的示例在其中添加了一些html 'Please fill out this form to sign up for this site'并将其返回。

在此处阅读有关动作和挂钩的更多信息:

http://codex.wordpress.org/Plugin_API


约翰,非常感谢。好答案!但是我似乎在插件文件中甚至找不到一个“ add_filter('simplr-reg-instructions',...”)行。apply_filter怎么能比呢?

1
如果没有将任何过滤器添加到钩子,它将仅返回原始输入。过滤器不存在供插件使用,如果需要/想要,则可以使用该过滤器,从而不必修改插件本身。
约翰·布洛赫

+1出色的解释-读起来像医生应该的;-)
Eddie B

+1好的答案,正是我想要的,我变得非常困惑,但是现在一切都很清楚了;)
doz87 2015年

5

您在这里有两个不同的功能apply_filters__()

apply_filters函数是让您使用自己的回调函数和该add_filter函数更改/编辑变量值的WordPress方法。它接受许多参数,但重要的是前两个参数:

$something = apply_filters( $tag, $value, $var ... );

$ tag是过滤器挂钩的名称,它在add_filter例如:

add_filter($tag,callback_function);

$ value是您将能够更改或编辑的实际值。

$ var是您的回调函数可以使用的一个或多个变量。

__() 函数用于翻译:

__($message,$text_domain);

$ message是要翻译的实际消息。

$ text_domain是用于加载插件或主题翻译的文本域标签 load_plugin_textdomain()

它能做什么?

它在本地化模块中搜索$ message的翻译,并将翻译传递给PHP return语句。如果找不到$ message的翻译,则仅返回$ message。

因此,现在您的情况下,这两个函数的工作方式相同,apply_filters将发送与simplr-reg-instructionsfilter hook 相关联的任何回调函数,其转换后的值(如果存在)“请填写此表单以申请此站点”使用以下文本:的域simplr-reg


Bainternet,非常感谢!我怎么在插件文件中找不到任何“ add_filter('simplr-reg-instructions',”行)
Ash

对于想要扩展或过滤插件功能的开发人员来说,这是一个钩子。
Bainternet

因此,这里不期望add_filter吗?我不明白为什么。apply_filters是否应该通过add_filter函数运行与其挂钩相关的所有函数?
灰烬

apply_filters是一个占位符,可让您使用挂钩自己的函数add_filter,因此除非您添加自己的函数,否则不会期望
add_filter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.