将变量传递给wordpress过滤器中的匿名函数

时间:2013-07-28 11:56:16

标签: php wordpress function anonymous

我试图覆盖在wordpress中创建SEO标题的插件。过滤器完成工作,但我需要动态创建标题。所以我创建标题然后将其传递给匿名函数。我可以有另一个功能,创建标题,这肯定会更清洁......

这有效

function seo_function(){

 add_filter('wpseo_title', function(){
        return 'test seo title';
    });

}

这不是

function seo_function(){

//create title above
$title="test seo title";


    add_filter('wpseo_title', function($title){
        return $title;
    });

}

感谢您的帮助

不使用匿名函数示例 - 这可行,但我仍然无法传递变量,我必须重复代码才能创建标题。

function seo_function(){

//create title above
$title="test seo title";


    add_filter('wpseo_title', 'seo_title');

}

function seo_title(){

$title="test";

return $title;

}

2 个答案:

答案 0 :(得分:11)

使用use关键字将变量传递到闭包范围:

$new_title = "test seo title";

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

函数($ arg)中的参数将由apply_filters()调用发送,例如另一个插件,而不是您的代码。

另请参阅:Passing a parameter to filter and action functions

答案 1 :(得分:0)

您可以提供给自定义过滤器的参数由过滤器和过滤器在Wordpress中的工作方式定义。有关Wordpress中过滤器的文档,请参阅http://codex.wordpress.org/Plugin_API/Filter_Reference

此外,您不是第一次尝试这样做,所以这可能会对您有所帮助(因为我没有安装Wordpress进行测试): http://wordpress.org/support/topic/change-the-title-dynamically

如果您无法正常工作,我建议您使用您正在使用的插件论坛或直接与开发者联系。