当前位置: 首页>>网站问题>>正文


apply_filters函数及其变量的说明

webfans 网站问题 , 去评论

问题描述

我正在学习如何使用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' ;

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

最佳解决办法

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

__()

这是一个翻译功能。如果设置正确,它将从pre-translated字符串列表中转换第一个参数。如果安装具有包含已编译转换的文件以供此函数使用,则它将使用它。当然,插件必须打包自己的翻译,因此第二个参数。 simplr-reg告诉 __(),字符串’请填写此表以注册此站点’的翻译应该在与’simplr-reg’关联的翻译文件中(这是通过 load_plugin_textdomain()函数在插件中提前完成的)。

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

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

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters()

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

要操纵数据,例如您询问过的代码片段,您可以使用函数add_filter()。以下是其工作原理的基本示例:

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

你可能会认识到那里的第一个论点。它与上面的add_filter中使用的相同。这是钩子名称。第二个参数是过滤器回调。它必须是函数的有效回调(read more about callbacks here)。这行代码说“当执行'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中有两种钩子:过滤器(我们在这里使用的那种)和动作。两者之间的主要区别在于过滤器期望您返回某些内容而操作则不会。因此,对于此过滤器,我上面的示例在'Please fill out this form to sign up for this site'周围添加了一些html并返回它。

阅读更多关于动作和钩子的信息:

http://codex.wordpress.org/Plugin_API

次佳解决办法

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

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

$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-instructions相关联的任何回调函数,使用text-domain将“请填写此表单以注册此站点”的翻译值(如果存在)挂钩simplr-reg

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2712.html,转载请务必附带本地址声明。