label); ?>
label); ?>
choices as $choice): ?>
description)) { echo '

' . implode('

', $this->description) . '

'; } else { echo $this->description; } ?>

We highly appreciate if you kindly take a few minutes to give us your impression of the theme and any suggestions you may have. It will help us to improve our ability to serve you and other users.

or

get_setting('blogname')->transport = 'postMessage'; $wp_customize->get_setting('blogdescription')->transport = 'postMessage'; $wp_customize->get_setting('custom_logo')->transport = 'postMessage'; $wp_customize->get_setting('header_image')->transport = 'postMessage'; $wp_customize->get_section('header_image')->title = 'Page Header'; $wp_customize->get_control('custom_logo')->section = 'attire_logo_options'; if (isset($wp_customize->selective_refresh)) { $wp_customize->selective_refresh->add_partial('blogdescription', array( 'selector' => '.site-description', 'render_callback' => 'attire_blogdescription_rcb' )); $wp_customize->selective_refresh->add_partial('blogname', array( 'selector' => 'a.site-logo', 'render_callback' => 'attire_blogname_rcb' )); $wp_customize->selective_refresh->add_partial('custom_logo', array( 'selector' => '.site-logo', 'render_callback' => 'attire_site_logo_rcb' )); $wp_customize->selective_refresh->add_partial('header_image', array( 'selector' => '.page_header_wrap', 'render_callback' => 'attire_custom_header_rcb' )); } /* Load Panels, Sections, Settings, Controls array */ require_once(ATTIRE_TEMPLATE_DIR . '/admin/customizer-config.php'); /* Adding support for Child Themes */ $attire_panels = apply_filters(ATTIRE_THEME_PREFIX . 'customizer_panels', $attire_panels); $attire_sections = apply_filters(ATTIRE_THEME_PREFIX . 'customizer_sections', $attire_sections); $attire_options = apply_filters(ATTIRE_THEME_PREFIX . 'customizer_options', $attire_options); /* Basic Config */ $theme_option = $attire_config['option_name']; $capability = $attire_config['capability']; $option_type = $attire_config['option_type']; /* Add Panels */ foreach ($attire_panels as $id => $args) { $wp_customize->add_panel($id, $args); } /* Add Sections */ foreach ($attire_sections as $id => $args) { $wp_customize->add_section($id, $args); } /* Add Settings and Controls */ foreach ($attire_options as $id => $args) { extract($args); switch ($type) { case 'text': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control($id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', )); break; case 'attire_review': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => '', 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => '__return_false' )); $wp_customize->add_control(new Attire_Static_Review_Text_Control($wp_customize, $id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', ))); break; break; case 'textarea': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_textarea_field', )); $wp_customize->add_control($id, array( 'label' => $label, 'type' => 'textarea', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', )); break; case 'email': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_email', )); $wp_customize->add_control($id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', )); break; case 'url': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'esc_url_raw', )); $wp_customize->add_control($id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', )); break; case 'number': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_integer', )); $wp_customize->add_control($id, array( 'label' => $label, 'type' => 'number', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', 'input_attrs' => array( 'min' => isset($min) ? $min : 0, 'max' => isset($max) ? $max : 5, ) )); break; case 'image': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'esc_url_raw', )); $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, $id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', ))); break; case 'select': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_select', )); $wp_customize->add_control($id, array( 'label' => $label, 'type' => 'select', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', 'choices' => $choices, )); break; case 'checkbox': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_checkbox', )); $wp_customize->add_control($id, array( 'label' => $label, 'type' => 'checkbox', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', )); break; case 'color': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_hex_color', )); $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, $id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', ))); break; case 'layout': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', // this has to be sanitized with sanitize_text_field and cant be sanitized with attire_sanitize_custom_select/attire_sanitize_select // because no choices passed from customizer-control.php for this type (layout), instead it's render manually byt the function Layout_Picker_Custom_Control->render_content )); $wp_customize->add_control(new Attire_Layout_Picker_Custom_Control($wp_customize, $id, array( 'label' => $label, 'description' => '', 'type' => 'layout', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', ))); break; case 'image-picker': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_custom_select', )); $wp_customize->add_control(new Attire_Image_Picker_Custom_Control($wp_customize, $id, array( 'label' => $label, 'description' => '', 'type' => 'image-picker', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', 'choices' => $choices, ))); break; case 'dropdown-pages': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'capability' => $capability, 'default' => $default, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_integer', )); $wp_customize->add_control($id, array( 'label' => $label, 'section' => $section, 'type' => 'dropdown-pages', 'settings' => $theme_option . '[' . $id . ']', )); break; case 'dropdown-taxonomy': $choices = array(); $taxonomies = get_terms($taxonomy, 'hide_empty=0'); if (count($taxonomies) > 0) { foreach ($taxonomies as $taxo) { $tid = isset($taxo->term_id) ? $taxo->term_id : null; $name = isset($taxo->name) ? $taxo->name : null; $choices[$tid] = $name; } } $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control($id, array( 'label' => $label, 'type' => 'select', 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', 'choices' => $choices, )); break; case 'typography': $fontsdata = AttireOptionFields::GetFonts(); //wpdmdd($fontsdata); $fonts = array(); $fonts[''] = 'Default'; foreach ($fontsdata as $font) { $fonts[$font->family.":".implode(",", $font->variants)] = $font->family; } asort($fonts); $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control($id, array( 'settings' => $theme_option . '[' . $id . ']', 'label' => $label, 'section' => $section, 'type' => 'select', 'choices' => $fonts, )); break; case 'range': $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => $default, 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'attire_sanitize_integer', )); $wp_customize->add_control( new Attire_Customize_Range_Control( $wp_customize, $id, array( 'label' => $label, 'section' => $section, 'settings' => $theme_option . '[' . $id . ']', 'description' => __('Measurement is in pixel.', 'attire'), 'input_attrs' => $input_attrs, ) ) ); break; case 'dropdown-sidebar': global $wp_registered_sidebars; $sidebars = array(); $sidebars['no_sidebar'] = 'Do not apply'; foreach ($wp_registered_sidebars as $sidebar) { $sid = $sidebar['id']; $sidebars[$sid] = $sidebar['name']; } $wp_customize->add_setting($theme_option . '[' . $id . ']', array( 'default' => '', 'capability' => $capability, 'type' => $option_type, 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', )); $wp_customize->add_control($id, array( 'settings' => $theme_option . '[' . $id . ']', 'label' => $label, 'section' => $section, 'type' => 'select', 'choices' => $sidebars, )); break; default: break; } if (isset($wp_customize->selective_refresh)) { if ($id === 'site_logo_footer') { $wp_customize->selective_refresh->add_partial('site_logo_footer_partial', array( 'settings' => array('attire_options[site_logo_footer]'), 'selector' => '.footer-logo', 'render_callback' => 'attire_site_logo_footer_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } elseif ($id === 'nav_header') { $wp_customize->selective_refresh->add_partial('nav_header_partial', array( 'settings' => array('attire_options[nav_header]'), 'selector' => '.header-div', 'render_callback' => 'attire_nav_header_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } elseif ($id === 'footer_style') { $wp_customize->selective_refresh->add_partial('footer_style_partial', array( 'settings' => array('attire_options[footer_style]'), 'selector' => '.footer-div', 'render_callback' => 'attire_footer_style_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } elseif ($id === 'copyright_info') { $wp_customize->selective_refresh->add_partial('copyright_info_partial', array( 'settings' => array('attire_options[copyright_info]'), 'selector' => '.copyright-text', 'render_callback' => 'attire_copyright_info_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } elseif ($id === 'copyright_info_visibility') { $wp_customize->selective_refresh->add_partial('copyright_info_visibility_partial', array( 'settings' => array('attire_options[copyright_info_visibility]'), 'selector' => '.copyright-outer', 'render_callback' => 'attire_copyright_info_visibility_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } elseif ($id === 'attire_archive_page_post_view') { $wp_customize->selective_refresh->add_partial('attire_archive_page_post_view_partial', array( 'settings' => array('attire_options[attire_archive_page_post_view]'), 'selector' => '.archive-div', 'render_callback' => 'attire_archive_page_post_view_rcb', 'fallback_refresh' => false, 'container_inclusive' => false, )); } } } } add_action('customize_register', 'attire_customize_register'); /** * * Sanitize Input Data */ function attire_sanitize_integer($input) { if (is_numeric($input)) { return intval($input); } } function attire_sanitize_email($input) { if (is_email($input)) { return $input; } } function attire_sanitize_custom_select($input, $setting) { // Ensure input is a slug. $input = sanitize_key($input); if (strrpos($setting->id, '[')) { $id = explode('[', $setting->id); $id = explode(']', $id[1]); $id = $id[0]; } else { $id = $setting->id; } // Get list of choices from the control associated with the setting. $choices = $setting->manager->get_control($id)->choices; // If the input is a valid key, return it; otherwise, return the default. foreach ($choices as $choice) { if ($choice['value'] === $input) { return $input; } } return $setting->default; } function attire_sanitize_select($input, $setting) { // Ensure input is a slug. $input = sanitize_key($input); // Get list of choices from the control associated with the setting. if (strrpos($setting->id, '[')) { $id = explode('[', $setting->id); $id = explode(']', $id[1]); $id = $id[0]; } else { $id = $setting->id; } $choices = $setting->manager->get_control($id)->choices; // If the input is a valid key, return it; otherwise, return the default. return (array_key_exists($input, $choices) ? $input : $setting->default); } function attire_sanitize_checkbox($checked) { // Boolean check. return ((isset($checked) && true == $checked) ? true : false); } /** * * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. */ function attire_customize_preview_js() { wp_enqueue_script('attire_customizer', get_template_directory_uri() . '/admin/js/customizer.js', array('customize-preview'), '20171015', true); } add_action('customize_preview_init', 'attire_customize_preview_js'); /** * * Customizing Customizer Controls */ function attire_customizer_style() { wp_enqueue_style('attire-customizer-controls-css', get_template_directory_uri() . '/admin/css/attire-customizer-controls.css'); wp_enqueue_script('attire-customizer-controls-js', get_template_directory_uri() . '/admin/js/attire-customizer-controls.js', array( 'jquery', 'customize-controls' ), false, true); } add_action('customize_controls_enqueue_scripts', 'attire_customizer_style'); /** * * Partials Render Callbacks * */ function attire_blogdescription_rcb() { bloginfo('description'); } function attire_blogname_rcb() { bloginfo('name'); } function attire_site_logo_rcb() { return ''; } function attire_custom_header_rcb() { AttireThemeEngine::PageHeaderStyle(); } function attire_site_logo_footer_rcb() { $logourl = esc_url(AttireThemeEngine::NextGetOption('site_logo_footer')); if ($logourl) { return "" . AttireThemeEngine::FooterLogo() . ""; } else { return esc_html(get_bloginfo('sitename')); } } function attire_nav_header_rcb() { AttireThemeEngine::HeaderStyle(); } function attire_footer_style_rcb() { AttireThemeEngine::FooterStyle(); } function attire_copyright_info_rcb() { return AttireThemeEngine::NextGetOption('copyright_info'); } function attire_copyright_info_visibility_rcb() { $show = AttireThemeEngine::NextGetOption('copyright_info_visibility'); if ($show === 'show') { return '