But I need to associate this $user_language to a “set_current_language”. I can do this by doing an add filter hook, but add_filter does not accept parameters. This is the add_filter line with the function itself but I don’t know how to pass the $user_id or the $user_language so that set_current_language will be set to $user_language:
Passing a parameter to filter and action functions
I appreciate any tips. Probably there is an easy way.
2 Answers 2
The trick Toscho used was to get around the problem using Objects.
So lets say we have a filter named xyz, that passes in some post content. The goal of this hypothetical scenario is to append a word to the content that we can not “hardcode”.
So we append to $content, but how do we get the value to append? That is the crux of your issue.
To solve this problem you can use 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' ) );
Here the class/object is being used to store the extra data.
An alternative to this would be to use a closure ( not a lambda function ) to create a new function based on a value, but this will not work prior to PHP 5.3, e.g.:
add_filter('xyz',
function($content) use ($appended_value) {
return $content.$appended_value;
}
);
Disclaimer: None of this code is copy paste, it is for demonstrative purposes.