如何将变量用作ADD_SETTINGS_FIELD的回调函数名

时间:2013-03-29 作者:Starfs

我试图减少主题选项函数中的代码量。我像这样添加设置:add\\u settings\\u field($k、$v、$callback、$the\\u options、$the\\u group、$args);

只要我写出函数的名称,这在各个方面都适用。例如,如果$callback=\'awesome\\u callback\',我创建了一个名为

awesome_callback(){ echo \'something\'}; 
没有任何问题。

下面的循环也可以在选项数组中循环,以创建设置字段。。并获取所有必要的数据。它也呼应了我认为我的回调应该被命名的确切内容。然而,现在我在这个循环之外有无数个回调函数,除了函数名之外,所有回调函数看起来都完全相同(

foreach($theOptions as $k=>$v) {

    add_settings_field($k,$v,$callback,$the_options,$the_group,$args);
    echo $callback;

}
与我赤裸。我希望有人以前遇到过这个问题,并让我知道我遗漏了一些明显的东西。以下内容也适用于同一循环之外的wordpress环境。

$callback = \'awesome_callback\';
$callback = function() {
    echo \'awesome callback\';
}
$callback();
但是,以下内容将向未知回调函数返回一个错误,即使当我回显$callback变量时,它会回显我在回调函数中引用的确切字符串。我想我超过了回调值???

foreach($theOptions as $k=>$v) {

    $callback = $k.\'_callback\';
    add_settings_field($k,$v,$callback,$the_options,$the_group,$args);


    $callback = function() {
        echo \'Testing the callback !!! <br>\';
    };

}
有谁能解释一种通过选项数组进行循环的解决方案,这种方法允许在循环中调用回调函数,而无需硬编码?这是可以用类解决的问题吗?我不能把头凑过去。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

不要使用不同的回调,请使用第六个参数add_settings_field() 相反这是一个数组,您可以在此处将任何数据传递给回调函数。

示例:

foreach( $theOptions as $k => $v ) 
{
    add_settings_field(
        $k,
        $v,
        \'my_callback\',
        $the_options,
        $the_group,
        array (
            \'special\' => $k
        )
    );
}

function my_callback( $args )
{
    var_dump( $args[\'special\'] );

    switch ( $args[\'special\'] )
    {
        case \'foo\':
            // do something
            break;
        case \'bar\':
            // do something else
            break;
        default:
            // default handler 
    }
}

结束