passing a variable to an anonymous function in a wordpress filter

anonymous, function, php, wordpress

Solution

You pass variables into the closure scope with the `use` keyword:

$new_title = "test seo title";

add_filter( 'wpseo_title', function( $arg ) use ( $new_title ) {
    return $new_title;
});

The argument in function($arg) will be sent by the apply_filters() call, eg the other plugin, not by your code.

See also: Passing a parameter to filter and action functions

Problem

I am trying to override a plugin that creates SEO titles in wordpress. The filter does the job but I need to dynamically create the titles. So I create the title then pass it to an anonymous function. I could have another function that creates the titles put this will definitely be cleaner... This works ``` function seo_function(){ add_filter('wpseo_title', function(){ return 'test seo title'; }); } ``` This doesn't ``` function seo_function(){ //create title above $title="test seo title"; add_filter('wpseo_title', function($title){ return $title; }); } ``` Thanks for any help Joe Without using an anonymous function example - this works, but I still can't pass a variable, I'd have to duplicate code to create the title. function seo_function(){ ``` //create title above $title="test seo title"; add_filter('wpseo_title', 'seo_title'); } function seo_title(){ $title="test"; return $title; } ```

Original source