闲聊

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内。

闲聊

今天来写第一篇文章

说起来也是逗,很久没折腾这种东西的我,这几天开始折腾WordPress,我也不知道是哪里心血来潮。

之前建WordPress都是改代码,从来没搞过插件,萌豚心态严重,所以我就安装了Live2D 看板娘 ,对于我这个33岁的萌豚来说,这玩意还是挺有意思的,但是我在Fork中没有找到做成插件的,唯一就是作者做了Z-blog的插件,我要不自己做一个吧!

想换工作,但是还是喜欢写代码,作为一个喜欢写代码的产品经理来说,可能还是改错行了~

不说了,先研究明白再写正片。