label ); ?>
label ); ?>
get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
if ( isset( $wp_customize->selective_refresh ) ) {
$wp_customize->selective_refresh->add_partial( 'blogdescription', array(
'selector' => '.site-description',
'render_callback' => 'blogdescription_rcb'
) );
$wp_customize->selective_refresh->add_partial( 'blogname', array(
'selector' => 'a.site-logo',
'render_callback' => 'blogname_rcb'
) );
}
/* Load Panels, Sections, Settings, Controls array */
require_once( dirname( __FILE__ ) . '/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 '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 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 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();
$fonts = array();
$fonts[''] = 'Default';
foreach ( $fontsdata as $key => $font ) {
$fonts[ $key ] = $font['name'];
}
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 WP_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 ( $id === 'site_logo' ) {
$wp_customize->selective_refresh->add_partial( 'site_logo_partial', array(
'settings' => array( 'attire_options[site_logo]' ),
'selector' => '.site-logo',
'render_callback' => 'site_logo_rcb',
'fallback_refresh' => false,
'container_inclusive' => false,
) );
} elseif ( $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' => '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' => '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' => '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' => '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' => '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( ']', explode( '[', $setting->id )[1] )[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( ']', explode( '[', $setting->id )[1] )[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 blogdescription_rcb() {
bloginfo( 'description' );
}
function blogname_rcb() {
bloginfo( 'name' );
}
function site_logo_rcb() {
return '' . AttireThemeEngine::SiteLogo() . '';
}
function 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 nav_header_rcb() {
AttireThemeEngine::HeaderStyle();
}
function footer_style_rcb() {
AttireThemeEngine::FooterStyle();
}
function copyright_info_rcb() {
return AttireThemeEngine::NextGetOption( 'copyright_info' );
}
function copyright_info_visibility_rcb() {
$show = AttireThemeEngine::NextGetOption( 'copyright_info_visibility' );
if ( $show === 'show' ) {
return '' . esc_html( AttireThemeEngine::NextGetOption( 'copyright_info' ) ) . '';
} else {
return '';
}
}
function attire_archive_page_post_view_rcb() {
get_template_part( 'loop', get_post_type() );
}