I've read WordPress codex many times but still don't understand how to return the value if more than one arguments involved. For example:
function bbp_get_topic_title( $topic_id = 0 ) {
$topic_id = bbp_get_topic_id( $topic_id );
$title = get_the_title( $topic_id );
return apply_filters( 'bbp_get_topic_title', $title, $topic_id );
}
In the above filter, there are 2 arguments. When I add_filter
, should I return 2 value, or just return the one I need? Is the following example correct if need the title?
add_filter( 'bbp_get_topic_title', 'my_topic_title', 10, 2 );
function my_topic_title( $title, $topic_id ){
$title = 'my_example_title';
return $title;
}
That's absolutely correct.
When registering a filter(or basically calling
apply_filters
), you should call the function with at least two arguments - name of the filter to be applied and the value to which the filter will be applied.Any further arguments that you pass to the function will be passed to the filtering functions, but only if they have requested additional arguments. Here's an example:
Given the code above, the
content to be filtered
will be passed first tomy_filtering_function1
. This function will only receive thecontent to be filtered
and not the additional arguments.Then the content will then be passed(after being treated by
my_filtering_function1
) tomy_filtering_function2
. Again the function will only receive the first argument.Finally the content will be passed to the
my_filtering_function3
function(as it has been changed by the previous two functions). This time the function will be passed 2 arguments instead(since we specified this), but it won't get theargument 3
argument.See
apply_filters()
in source.