public function add_settings($args)
 {
     if (isset($args['settings']) && is_array($args['settings'])) {
         $settings = $args['settings'];
         $defaults = isset($args['default']) ? $args['default'] : array();
         $sanitize_callback = Kirki_Field_Sanitize::sanitize_callback($args);
         foreach ($settings as $setting_key => $setting_value) {
             $default = isset($defaults[$setting_key]) ? $defaults[$setting_key] : '';
             $type = Kirki_Field_Sanitize::sanitize_type($args);
             $capability = Kirki_Field_Sanitize::sanitize_capability($args);
             $transport = isset($args['transport']) ? $args['transport'] : 'refresh';
             if (isset($args['sanitize_callback']) && is_array($args['sanitize_callback'])) {
                 if (isset($args['sanitize_callback'][$setting_key])) {
                     $sanitize_callback = Kirki_Field_Sanitize::sanitize_callback(array('sanitize_callback' => $args['sanitize_callback'][$setting_key]));
                 }
             }
             $this->wp_customize->add_setting($setting_value, array('default' => $default, 'type' => $type, 'capability' => $capability, 'sanitize_callback' => $sanitize_callback, 'transport' => $transport));
         }
     }
     if (isset($args['type']) && array_key_exists($args['type'], Kirki_Control::$setting_types)) {
         // We must instantiate a custom class for the setting
         $setting_classname = Kirki_Control::$setting_types[$args['type']];
         $this->wp_customize->add_setting(new $setting_classname($this->wp_customize, $args['settings'], array('default' => isset($args['default']) ? $args['default'] : '', 'type' => Kirki_Field_Sanitize::sanitize_type($args), 'capability' => Kirki_Field_Sanitize::sanitize_capability($args), 'transport' => isset($args['transport']) ? $args['transport'] : 'refresh', 'sanitize_callback' => Kirki_Field_Sanitize::sanitize_callback($args))));
     } else {
         $this->wp_customize->add_setting($args['settings'], array('default' => isset($args['default']) ? $args['default'] : '', 'type' => Kirki_Field_Sanitize::sanitize_type($args), 'capability' => Kirki_Field_Sanitize::sanitize_capability($args), 'transport' => isset($args['transport']) ? $args['transport'] : 'refresh', 'sanitize_callback' => Kirki_Field_Sanitize::sanitize_callback($args)));
     }
 }
 public function test_sanitize_callback()
 {
     $this->assertEquals('__return_true', Kirki_Field_Sanitize::sanitize_callback(array('sanitize_callback' => '__return_true')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'checkbox'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'checkbox')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'color'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'color-alpha')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'color'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'color')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'unfiltered'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'custom')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'dropdown_pages'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'dropdown-pages')));
     $this->assertEquals('esc_textarea', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'editor')));
     $this->assertEquals('esc_url_raw', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'image')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'multicheck'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'multicheck')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'number'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'number')));
     $this->assertEquals('esc_attr', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'palette')));
     $this->assertEquals('esc_attr', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'radio-buttonset')));
     $this->assertEquals('esc_attr', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'radio-image')));
     $this->assertEquals('esc_attr', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'radio')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'unfiltered'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'select')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'number'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'slider')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'sortable'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'sortable')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'checkbox'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'switch')));
     $this->assertEquals('esc_textarea', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'text')));
     $this->assertEquals('esc_textarea', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'textarea')));
     $this->assertEquals(array('Kirki_Sanitize_Values', 'checkbox'), Kirki_Field_Sanitize::sanitize_callback(array('type' => 'toggle')));
     $this->assertEquals('esc_url_raw', Kirki_Field_Sanitize::sanitize_callback(array('type' => 'upload')));
 }