具有多个设置字段的单次回调

时间:2013-09-29 作者:Andre Yonadam

您是否可以对多个设置字段使用单个回调?也许有一种方法可以通过回调传递使用的设置字段?

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

add_settings_field() 接受六个参数,最后一个是参数数组:

add_settings_field($id, $title, $callback, $page, $section, $args);
您可以在此处添加自定义值,以便重用一个回调。

一个简单的例子:

add_settings_field(
    \'foo\',
    \'Foo\',
    \'wpse_settingsfield_callback\',
    \'my_page\',
    \'my_section\',
    array ( \'context\' => \'foo\' ) // custom arguments
);
add_settings_field(
    \'bar\',
    \'Bar\',
    \'wpse_settingsfield_callback\',
    \'my_page\',
    \'my_section\',
    array ( \'context\' => \'bar\' ) // custom arguments
);

function wpse_settingsfield_callback( $args )
{
    if ( \'foo\' === $args[ \'context\' ] )
        print \'Hello Foo!\';
    elseif ( \'bar\' === $args[ \'context\' ] )
        print \'Hello Bar!\';
    else
        print \'Unknown context!\';
}
另一个选项是用于场渲染的单独类。让我们学习一门非常简单且不完整的课程:

class Checkbox_Settingsfield_View {

    protected $attributes, $label;

    public function set_attributes( Array $attributes )
    {
        $this->attributes = $attributes;
    }

    public function render()
    {
        printf(
            \'<label for="%1$s"><input type="checkbox"%2$s /></label>\',
            $this->attributes[ \'id\' ],
            $this->array_to_attrs( $this->attributes )
        );
    }

    protected function array_to_attrs( array $attrs, $xml = TRUE )
    {
        $str = \'\';

        foreach ( $attrs as $key => $value ) {
            if ( TRUE === $value )
                ( $xml and $value = "=\'$key\'" ) or $value = \'\';

            $str .= " $key=\'" . esc_attr( $value) . "\'";
        }

        return $str;
    }
}
现在设置对象…

$foo_view = new Checkbox_Settingsfield_View;
$foo_view->set_attributes(
    array (
        \'name\'  => \'foo\',
        \'style\' => \'border:10px solid red\'
    )
);
$bar_view = new Checkbox_Settingsfield_View;
$bar_view->set_attributes(
    array (
        \'name\'  => \'bar\',
        \'style\' => \'border:5px solid blue\'
    )
);
…并通过方法render() 作为回调参数:

add_settings_field(
    \'foo\',
    \'Foo\',
    array ( $foo_view, \'render\' ),
    \'my_page\',
    \'my_section\'
);
add_settings_field(
    \'bar\',
    \'Bar\',
    array ( $bar_view, \'render\' ),
    \'my_page\',
    \'my_section\'
);

结束

相关推荐

使用jQuery删除存储在wp_Options中的数据

我想知道是否有人能就我的问题给我进一步的建议。我的插件的一部分存储了用于调试的日志文件。我已经使用jquery和wp\\u localise\\u脚本在我的管理页面的(div#log)中成功地显示了它们。我有一个删除这些日志的按钮,但我不确定如何处理。我觉得ajax可能会在这里派上用场,但不确定从哪里开始。以下是我的代码的相关部分:admin_enqueue_scripts (action) $args = array(get_option(\'wow_tweets_log\'));//log files