如何将参数传递给此Add_Filter示例

时间:2013-03-05 作者:Emerson Maningo

我有一个具有此函数的类,用于提供基于$user\\u id的用户语言

function provide_user_language($user_id) {

return apply_filters(\'get_user_language\',$user_id);

}
因此,在我的脚本中,我可以通过以下操作简单地获得用户语言:

$user_language=$this->provide_user_language($user_id);
但我需要将此$user\\u语言与“set\\u current\\u语言”相关联。我可以通过添加过滤器挂钩来实现这一点,但add\\u过滤器不接受参数。这是函数本身的add\\u筛选器行,但我不知道如何传递$user\\u id或$user\\u语言,以便将set\\u current\\u language设置为$user\\u language:

add_filter(\'set_current_language\', array(&$this,\'provide_user_language\')); 
我试着遵循这一点,但不起作用:

Passing a parameter to filter and action functions

谢谢你给我小费。也许有一个简单的方法。

2 个回复
最合适的回答,由SO网友:Emerson Maningo 整理而成

谢谢Tom,不幸的是Toscho的概念对我不适用,所以我在这里更深入地研究了添加过滤器文档:http://codex.wordpress.org/Function_Reference/add_filter 它们允许匿名函数作为回调函数。

这个方法最终解决了我的问题。以下是我为其他遇到此问题的用户解决此问题的方法:

add_filter(\'set_current_language\', 
    function($lang_set) use ($user_language) {
    $lang_set=$user_language;
    return $lang_set;
});
在这个方法中,我将$user\\u语言(可用)传递给add\\u过滤器挂钩$lang\\u set是用于返回回调输出的伪变量。

我终于使用add\\u filter将“set\\u current\\u language”设置为用户语言。

SO网友:Tom J Nowell

Toscho使用的技巧是使用对象绕过问题。

假设我们有一个名为xyz, 这会传递一些帖子内容。这个假设场景的目标是在内容中添加一个我们无法“硬编码”的单词。

以下是基本过滤器:

add_filter( \'xyz\', \'test\' );
function test( $content ) {
    return $content;
}
所以我们附加到$content, 但是我们如何获得要附加的值呢?这是你问题的症结所在。

要解决此问题,可以使用OOP:

class test_object {
    public $appended_value = \'\';
    function test( $content ) {
        return $content.$this->appended_value;
    }
}

$obj = new test_object();
$obj->appended_value = \'hello world\';
add_filter( \'xyz\', array( $obj, \'test\' ) );
这里,类/对象用于存储额外的数据。

另一种方法是使用闭包(不是lambda函数)基于值创建新函数,但这在PHP 5.3之前不起作用,例如:

add_filter(\'xyz\', 
    function($content) use ($appended_value) {
        return $content.$appended_value;
    }
);
免责声明:此代码都不是复制粘贴,只是用于演示目的。

结束

相关推荐