使用ADD_SETTINGS_FIELD回调的多个字段

时间:2013-11-18 作者:Nathan Powell

我有一个设置页面,我在其中创建一个UI,用于更改布局模板的列宽。要在我的设置页面上自定义此设置,我正在使用do_settings_fields 对于输出和add_settings_field 使用具有多个字段的回调函数。

我的问题是:对多个设置字段使用单个回调是否错误?一切都很顺利,这个解决方案是我实现所需的最简单的方法。

1 个回复
SO网友:fuxia

这取决于字段的作用。如果它们都是相同的类型,例如标签和文本输入,那么,是的,这是一种很好的方法。你可以use the sixth parameter 创建不同的输出。

但如果这些字段不同,则需要不同的转义方法(esc_textarea()esc_attr()) 和不同的HTML代码,那么您应该使用不同的回调。

假设你有stored your data in an array.

现在,您的控制器类中有了一个函数或方法,可以为不同的输出创建一个数据对象和多个视图对象:

class Settings_Controller
{
    public function __construct()
    {
        $data       = new Settings_Data( \'wpse_123635\' ); // option name
        $textarea   = new Textarea( $data, \'s1\' ); // data plus field id
        $checkbox   = new Checkbox( $data, \'s2\' );
        $text_field = new Text_field( $data, \'s3\' );

        add_settings_field(
            \'s1\',
            \'A textarea\',
            array ( $textarea, \'render\' ),
            \'my_page\',
            \'my_section\'
        );

        add_settings_field(
            \'s2\',
            \'A textarea\',
            array ( $checkbox, \'render\' ),
            \'my_page\',
            \'my_section\'
        );

        add_settings_field(
            \'s3\',
            \'A textarea\',
            array ( $text_field, \'render\' ),
            \'my_page\',
            \'my_section\'
        );
    }
}
Theviews will get their data now from the model $data. 它们是可单独测试的、可重用的,并且很好地解耦。您可以将同一视图类用于其他数据提供程序的多个字段等。

如果有疑问,请保持简单。但是,如果您意识到一个功能需要做的事情太多,请将其任务分开。

结束

相关推荐