I have a class with this function to provide a user language based on $user_id
function provide_user_language($user_id) {
return apply_filters('get_user_language',$user_id);
}
So in my script, I can simply get the user language by doing this:
$user_language=$this->provide_user_language($user_id);
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:
add_filter('set_current_language', array(&$this,'provide_user_language'));
I tried following this one but it won’t work:
Passing a parameter to filter and action functions
I appreciate any tips. Probably there is an easy way.
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”.Here’s the basic filter:
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:
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.:
Disclaimer: None of this code is copy paste, it is for demonstrative purposes.
Thanks Tom,
Unfortunately Toscho concept didn’t work for me, so I dig deeper in the add filter documentation here: http://codex.wordpress.org/Function_Reference/add_filter and they allow anonymous functions as callback.
This method finally solved my problem. This is how I resolve this one for other users that are experiencing this issue:
In this method, I pass the $user_language(which is available) to the add_filter hook. $lang_set is the dummy variable used to return the callback output.
I have finally set the “set_current_language” to the user language using add_filter.