我在做插件的时候,发现有一些数组型的插件设置,想保存到同一个字段中,但是在国内找了一些文章,没有描述如何活用add_settings_field 。
我这次就尝试如何给一个add_settings_field中放置多个input,
add_settings_field(
'hour_tips', // id
'每个小时的提示', // title
array( $this, 'hour_tips_callback' ), // callback
'live-2d-advanced-admin', // page
'live_2d_advanced_setting_section' // section
);
在这里,使用hour_tips_callback
作为此控件的回调方法
public function hour_tips_callback() {
printf(
'<input class="regular-text" style="width: 100px" type="text" name="live_2d_advanced_option_name[hour_tips][0][0]" id="hour_tips_1" value="%s"> 时
<input class="regular-text" type="text" name="live_2d_advanced_option_name[hour_tips][0][1]" id="hour_tips_2" value="%s"><br />',
isset( $this->live_2d_advanced_options['hour_tips'][0][0] ) ? esc_attr( $this->live_2d_advanced_options['hour_tips'][0][0]) : '',
isset( $this->live_2d_advanced_options['hour_tips'][0][1] ) ? esc_attr( $this->live_2d_advanced_options['hour_tips'][0][1]) : ''
);
}
在options名字中:live_2d_advanced_options
作为一个options的字段,可以存储多维数据,我就把此作为Array,保存成了二维数组,我不知道在PHP中应该怎么描述,应为我一直是做.net的开发,对这个只是刚入门,我从数据库观察,其大致原理为:在wp-options这个标中创建一个新行,其名称为live_2d_advanced_option_name,其中存储一个WP定义的数据组,数据组是字符串,可保存普通字符串或者是一个List。
在add_settings_field
的sanitize过滤器中,需要传递一个不经过过滤的对象:
if ( isset( $input['hour_tips'] ) ) {
$sanitary_values['hour_tips'] = $input['hour_tips'];
}
这样数据就会被保存至Wp-api中存储至wp-options内。