闲聊

WordPress插件开发:为add_settings_field 添加多个input

我在做插件的时候,发现有一些数组型的插件设置,想保存到同一个字段中,但是在国内找了一些文章,没有描述如何活用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内。