/**
  * Add custom CSS rules to the head, applying our custom styles
  */
 function custom_css()
 {
     $color = $this->get_admin_colors();
     $config = Kirki::config();
     $color_font = false;
     $color_accent = $config->get('color_accent', $color['icon_colors']['focus']);
     $color_back = $config->get('color_back', '#ffffff');
     $color_font = 170 > Kirki_Color::get_brightness($color_back) ? '#f2f2f2' : '#222';
     $styles = '<style>';
     // Background styles
     $styles .= '#customize-controls .wp-full-overlay-sidebar-content{background-color:' . $color_back . ';}';
     $styles .= '#customize-theme-controls .accordion-section-title, #customize-info .accordion-section-title,#customize-info .accordion-section-title:hover,#customize-info.open .accordion-section-title{background-color:' . $color_back . ';color:' . $color_font . ';}';
     $styles .= '#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section .accordion-section-title:focus,.control-section.control-panel>.accordion-section-title:after{background-color:' . Kirki_Color::adjust_brightness($color_back, -10) . ';color:' . $color_font . ';}';
     $styles .= '#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:focus:after, #customize-theme-controls .control-section.control-panel>h3.accordion-section-title:hover:after{background-color:' . Kirki_Color::adjust_brightness($color_back, -20) . ';color:' . $color_font . ';}';
     $styles .= '#customize-theme-controls .control-section.open .accordion-section-title{background-color:' . $color_accent . ' !important;color:' . $color_font . ' !important;}';
     // Tooltip styles
     // $styles .= 'li.customize-control a.button.tooltip.hint--left {color:' . $color_accent . ';}';
     // Image-Radio styles
     $styles .= '.customize-control-radio-image .image.ui-buttonset label.ui-state-active {border-color:' . $color_accent . ';}';
     // Buttonset-Radio styles
     $styles .= '.customize-control-radio-buttonset label.ui-state-active{background-color:' . $color_accent . ';color:' . $color_font . ';}';
     // Slider Controls
     $styles .= '.customize-control-slider .ui-slider .ui-slider-handle{background-color:' . $color_accent . ';border-color:' . $color_accent . ';}';
     // Switch Controls
     $styles .= '.customize-control-switch .Switch .On, .customize-control-toggle .Switch .On{color:' . $color_accent . ';}';
     // Toggle Controls
     $styles .= '.customize-control-switch .Switch.Round.On, .customize-control-toggle .Switch.Round.On{background-color:' . Kirki_Color::adjust_brightness($color_accent, -10) . ';}';
     // Sortable Controls
     $styles .= '.customize-control-sortable ul.ui-sortable li .dashicons.visibility{color:' . $color_accent . ';}';
     // Palette Controls
     $styles .= '.customize-control-palette label.ui-state-active.ui-button.ui-widget span.ui-button-text {border-color:' . $color_accent . ';}';
     $styles .= '</style>';
     echo $styles;
 }
/**
 * Sanitize a value from a list of allowed values.
 *
 * @since 0.5
 *
 * @param  mixed    $input      The value to sanitize.
 * @param  mixed    $setting    The setting for which the sanitizing is occurring.
 */
function kirki_sanitize_choice($input, $setting)
{
    global $wp_customize;
    $config = Kirki::config()->get_all();
    if ('' != $config['option_name']) {
        return sanitize_key($input);
    }
    $field = $wp_customize->get_control($setting->id);
    return array_key_exists($input, $field->choices) ? $input : $setting->default;
}
 /**
  * Enqueue the scripts required.
  */
 public function customize_controls_enqueue_scripts()
 {
     $config = Kirki::config()->get_all();
     $kirki_url = '' != $config['url_path'] ? $config['url_path'] : KIRKI_URL;
     wp_enqueue_script('kirki_customizer_js', trailingslashit($kirki_url) . 'assets/js/customizer.js', array('jquery', 'customize-controls'));
     wp_enqueue_script('serialize-js', trailingslashit($kirki_url) . 'assets/js/serialize.js');
     wp_enqueue_script('jquery-stepper-min-js', trailingslashit($kirki_url) . 'assets/js/jquery.fs.stepper.min.js', array('jquery'));
     wp_enqueue_script('jquery-ui-core');
     wp_enqueue_script('jquery-ui-tooltip');
     wp_enqueue_script('jquery-stepper-min-js');
 }
 /**
  * Add a dummy, empty stylesheet if no stylesheet_id has been defined and we need one.
  */
 public function frontend_styles()
 {
     // Early exit if we're not using output
     if (!$this->uses_output()) {
         return;
     }
     $config = Kirki::config()->get_all();
     $kirki_stylesheet = Kirki::config()->getOrThrow('stylesheet_id');
     $root_url = '' != $config['url_path'] ? Kirki::config()->getOrThrow('url_path') : KIRKI_URL;
     if ('kirki-styles' == $kirki_stylesheet) {
         wp_enqueue_style('kirki-styles', trailingslashit($root_url) . 'assets/css/kirki-styles.css', NULL, NULL);
     }
 }
 /**
  * If we've specified an image to be used as logo,
  * replace the default theme description with a div that will include our logo.
  */
 public function customize_controls_print_scripts()
 {
     $options = Kirki::config()->get_all();
     $script = '';
     if ('' != $options['logo_image'] || '' != $options['description']) {
         if ('' != $options['logo_image']) {
             $script .= '$( \'div#customize-info .preview-notice\' ).replaceWith( \'<img src="' . $options['logo_image'] . '">\' );';
         }
         if ('' != $options['description']) {
             $script .= '$( \'div#customize-info .accordion-section-content\' ).replaceWith( \'<div class="accordion-section-content"><div class="theme-description">' . $options['description'] . '</div></div>\' );';
         }
     }
     if ('' != $script) {
         echo Kirki_Scripts_Registry::prepare($script);
     }
 }
Exemple #6
0
/**
 * Get the value of a field.
 */
function kirki_get_option($option = '')
{
    // Make sure the class is instanciated
    Kirki::get_instance();
    // Get the array of all the fields.
    $fields = Kirki::fields()->get_all();
    // Get the config.
    $config = Kirki::config()->get_all();
    /**
     * If no setting has been defined then return all.
     */
    if ('' == $option) {
        if ('option' == $config['options_type']) {
            $values = array();
            foreach ($fields as $field) {
                $values[] = get_option($field['settings'], $field['default']);
            }
        } else {
            $values = get_theme_mods();
        }
        return $values;
    }
    // If a value has been defined then we proceed.
    // Early exit if this option does not exist
    if (!isset($fields[$option])) {
        return;
    }
    $option_name = $fields[$option]['settings'];
    $default = $fields[$option]['default'];
    if ('option' == $config['options_type']) {
        $value = get_option($option_name, $default);
    } else {
        $value = get_theme_mod($option_name, $default);
    }
    return $value;
}
 /**
  * Sanitizes the setting name
  *
  * @param array the field definition
  * @return string.
  */
 public function sanitize_settings($field)
 {
     $config = Kirki::config()->get_all();
     // Pass this throught the sanitize_settings_raw method first.
     $field['settings'] = $this->sanitize_settings_raw($field);
     // Checking and sanitization of config values is handled by the Config class.
     // If the value of 'option_name' is not empty, then we're also using options instead of theme_mods.
     if ('' != $config['option_name']) {
         $field['settings'] = $config['option_name'] . '[' . $field['settings'] . ']';
     }
     return $field['settings'];
 }
Exemple #8
0
 public function test_get_option()
 {
     Kirki::$config = null;
     Kirki::$fields = null;
     $this->add_config();
     $this->add_field();
     $this->assertEquals('some-default-value', Kirki::get_option('my_config_theme_mods', 'my_setting_theme_mods'));
     $this->assertEquals('some-default-value', Kirki::get_option('my_config_options', 'my_setting_options'));
     $this->assertEquals('some-default-value', Kirki::get_option('my_config_options_serialized', 'my_option[my_setting_options_serialized]'));
     Kirki::$config = null;
     Kirki::$fields = null;
     $this->add_config();
     $this->add_background_fields();
     $this->assertEquals(array('color' => '#333333', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_theme_mods', 'my_settings_test_background_theme_mod'));
     $this->assertEquals(array('color' => '#333333', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_options', 'my_settings_test_background_options'));
     $this->assertEquals(array('color' => '#333333', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_options_serialized', 'my_option[my_settings_test_background_options_serialized]'));
     Kirki::$config = null;
     Kirki::$fields = null;
     $this->add_config();
     $this->add_background_fields();
     set_theme_mod('my_settings_test_background_theme_mod_color', '#000000');
     $this->assertEquals(array('color' => '#000000', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_theme_mods', 'my_settings_test_background_theme_mod'));
     update_option('my_settings_test_background_options_color', '#222222');
     $this->assertEquals(array('color' => '#222222', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_options', 'my_settings_test_background_options'));
     update_option('my_option', array('my_settings_test_background_options_serialized_color' => '#444444'));
     $this->assertEquals(array('color' => '#444444', 'image' => 'http://foo.com/bar.png', 'repeat' => 'no-repeat', 'size' => 'cover', 'attach' => 'scroll', 'position' => 'center-bottom', 'opacity' => '.6'), Kirki::get_option('my_config_options_serialized', 'my_option[my_settings_test_background_options_serialized]'));
 }
/**
 * Get the value of a field.
 */
function kirki_get_option($option = '')
{
    // Make sure the class is instanciated
    Kirki::get_instance();
    // Get the array of all the fields.
    $fields = Kirki::fields()->get_all();
    // Get the config.
    $config = Kirki::config()->get_all();
    // If we're using options instead of theme_mods,
    // then first we'll have to get the array of all options.
    if ('option' == $config['options_type']) {
        $values = array();
        if ('' == $config['option_name']) {
            // No option name is defined.
            // Each options is saved separately in the db, so we'll manually build the array here.
            foreach ($fields as $field) {
                $values[$field['settings']] = get_option($field['settings'], $field['default']);
            }
        } else {
            // An option_name has been defined so our options are all saved in an array there.
            $values = get_option($config['option_name']);
            foreach ($fields as $field) {
                if (!isset($values[$field['settings_raw']])) {
                    $values[$field['settings_raw']] = maybe_unserialize($field['default']);
                }
            }
        }
    }
    if ('' == $option) {
        // No option has been defined so we'll get all options and return an array
        // If we're using options then we already have the $values set above.
        // All we need here is a fallback for theme_mods
        if ('option' != $config['options_type']) {
            // We're using theme_mods
            $values = get_theme_mods();
        }
        // Early exit and return the array of all values
        return $values;
    }
    // If a value has been defined then we proceed.
    // Early exit if this option does not exist
    $field_id = 'option' == $config['options_type'] && '' != $config['option_name'] ? $config['option_name'] . '[' . $option . ']' : $option;
    if (!isset($fields[$field_id])) {
        return;
    }
    if ('option' == $config['options_type']) {
        // We're using options instead of theme_mods.
        // We already have the array of values set from above so we'll use that.
        $value = isset($values[$option]) ? $values[$option] : $fields[$option]['default'];
    } else {
        // We're using theme_mods
        $value = get_theme_mod($option, $fields[$option]['default']);
    }
    // Combine background options to a single array
    if ('background' == $fields[$field_id]['type']) {
        if ('option' == $config['options_type']) {
            $value = array('background-color' => isset($values[$option . '_color']) ? $values[$option . '_color'] : null, 'background-repeat' => isset($values[$option . '_repeat']) ? $values[$option . '_repeat'] : null, 'background-attachment' => isset($values[$option . '_attach']) ? $values[$option . '_attach'] : null, 'background-image' => isset($values[$option . '_image']) ? $values[$option . '_image'] : null, 'background-position' => isset($values[$option . '_position']) ? $values[$option . '_position'] : null, 'background-clip' => isset($values[$option . '_clip']) ? $values[$option . '_clip'] : null, 'background-size' => isset($values[$option . '_size']) ? $values[$option . '_size'] : null);
        } else {
            $value = array('background-color' => isset($fields[$field_id]['default']['color']) ? get_theme_mod($option . '_color', $fields[$field_id]['default']['color']) : null, 'background-repeat' => isset($fields[$field_id]['default']['repeat']) ? get_theme_mod($option . '_repeat', $fields[$field_id]['default']['repeat']) : null, 'background-attachment' => isset($fields[$field_id]['default']['attach']) ? get_theme_mod($option . '_attach', $fields[$field_id]['default']['attach']) : null, 'background-image' => isset($fields[$field_id]['default']['image']) ? get_theme_mod($option . '_image', $fields[$field_id]['default']['image']) : null, 'background-position' => isset($fields[$field_id]['default']['position']) ? get_theme_mod($option . '_position', $fields[$field_id]['default']['position']) : null, 'background-clip' => isset($fields[$field_id]['default']['clip']) ? get_theme_mod($option . '_clip', $fields[$field_id]['default']['clip']) : null, 'background-size' => isset($fields[$field_id]['default']['size']) ? get_theme_mod($option . '_size', $fields[$field_id]['default']['size']) : null);
        }
    }
    // Return the single value.
    // Pass it through maybe_unserialize so we're sure we get a proper value.
    return maybe_unserialize($value);
}
 /**
  * Add the required script.
  */
 function customize_controls_print_footer_scripts()
 {
     // Get an array of all our fields
     $fields = Kirki::fields()->get_all();
     // Get the config options
     $config = Kirki::config()->get_all();
     // Early exit if no controls are defined
     if (empty($fields)) {
         return;
     }
     $script = '';
     foreach ($fields as $field) {
         $required = isset($field['required']) ? $field['required'] : false;
         if ($required) {
             $show = false;
             foreach ($required as $dependency) {
                 // Find the type of the dependency control
                 if ('option' == $config['options_type'] && '' != $config['option_name']) {
                     $dependency['setting'] = $config['option_name'] . '[' . $dependency['setting'] . ']';
                 }
                 $type = $fields[$dependency['setting']]['type'];
                 // If "operator" is not set then set it to "=="
                 if (!isset($dependency['operator'])) {
                     $dependency['operator'] = '==';
                 }
                 $dependency['operator'] = esc_js($dependency['operator']);
                 // Set the control type
                 $type = 'dropdown-pages' == $type ? 'select' : $type;
                 $type = 'radio-image' == $type ? 'radio' : $type;
                 $type = 'radio-buttonset' == $type ? 'radio' : $type;
                 $type = 'toggle' == $type ? 'checkbox' : $type;
                 $type = 'switch' == $type ? 'checkbox' : $type;
                 // Set the controller used in the script
                 $controller = '#customize-control-' . $fields[$dependency['setting']]['id'] . ' input';
                 $common_controller = '';
                 // Se the controller for select-type controls
                 if ('select' == $type) {
                     $controller = '#customize-control-' . $fields[$dependency['setting']]['id'] . ' select';
                 } elseif ('radio' == $type) {
                     $controller = '#customize-control-' . $fields[$dependency['setting']]['id'] . ' input[value="' . $dependency['value'] . '"]';
                     $common_controller = '#customize-control-' . $fields[$dependency['setting']]['id'] . ' input';
                 }
                 // The target element
                 $target = '#customize-control-' . $field['id'];
                 // if this is a background control then make sure we target all sub-controls
                 if ('background' == $field['type']) {
                     $target = '#customize-control-' . $control['settings'] . '_color, ';
                     $target .= '#customize-control-' . $control['settings'] . '_image, ';
                     $target .= '#customize-control-' . $control['settings'] . '_repeat, ';
                     $target .= '#customize-control-' . $control['settings'] . '_size, ';
                     $target .= '#customize-control-' . $control['settings'] . '_position, ';
                     $target .= '#customize-control-' . $control['settings'] . '_attach';
                 }
                 // If no operator has been defined, fallback to '=='
                 if (!isset($dependency['operator'])) {
                     $dependency['operator'] = '==';
                 }
                 $action_1 = '.show()';
                 $action_2 = '.hide()';
                 // Allow checking both checked and unchecked checkboxes
                 if ('checkbox' == $type) {
                     if (0 == $dependency['value'] && '==' == $dependency['operator']) {
                         $action_1 = '.hide()';
                         $action_2 = '.show()';
                         $show = true;
                     }
                     if (1 == $dependency['value'] && '!=' == $dependency['operator']) {
                         $action_1 = '.hide()';
                         $action_2 = '.show()';
                     }
                 }
                 // Get the initial status
                 $value = kirki_get_option($dependency['setting']);
                 switch ($dependency['operator']) {
                     case '==':
                         $show = $dependency['value'] == $value ? true : $show;
                         break;
                     case '!=':
                         $show = $dependency['value'] != $value ? true : $show;
                         break;
                     case '>=':
                         $show = $dependency['value'] >= $value ? true : $show;
                         break;
                     case '<=':
                         $show = $dependency['value'] <= $value ? true : $show;
                         break;
                     case '>':
                         $show = $dependency['value'] > $value ? true : $show;
                         break;
                     case '<':
                         $show = $dependency['value'] < $value ? true : $show;
                         break;
                     default:
                         $show = $dependency['value'] == $value ? true : $show;
                 }
                 // if initial status is hidden then hide the control
                 if (false == $show) {
                     $script .= '$("' . $target . '").hide();';
                 }
                 // Create the actual script
                 $script .= "\$('" . ('radio' != $type ? $controller : $common_controller) . "').";
                 $script .= 'checkbox' == $type ? 'click' : 'change';
                 $script .= '(function(){';
                 $script .= "if (\$('" . $controller . "').";
                 $script .= 'select' != $type ? 'is(":checked") ) {' : 'val() ' . $dependency['operator'] . ' "' . $dependency['value'] . '") {';
                 $script .= "\$('" . $target . "')" . $action_1 . ';';
                 $script .= '} else {';
                 $script .= "\$('" . $target . "')" . $action_2 . ';';
                 $script .= '}});';
                 $script .= 'checkbox' != $type ? "\$('" . $controller . "')" . '.trigger("change");' : '';
             }
         }
     }
     // If there's a script then echo it wrapped.
     if (!empty($script)) {
         echo Kirki_Scripts_Registry::prepare($script);
     }
 }