这取决于字段的作用。如果它们都是相同的类型,例如标签和文本输入,那么,是的,这是一种很好的方法。你可以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\'
);
}
}
The
views will get their data now from the model $data
. 它们是可单独测试的、可重用的,并且很好地解耦。您可以将同一视图类用于其他数据提供程序的多个字段等。
如果有疑问,请保持简单。但是,如果您意识到一个功能需要做的事情太多,请将其任务分开。