get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
$wp_customize->get_section( 'header_image' )->panel = 'talon_header_panel';
$wp_customize->get_section( 'header_image' )->priority = '12';
//Titles
class Talon_Info extends WP_Customize_Control {
public $type = 'info';
public $label = '';
public function render_content() {
?>
label ); ?>
add_panel( 'talon_header_panel', array(
'priority' => 10,
'capability' => 'edit_theme_options',
'theme_supports' => '',
'title' => __('Header area', 'talon'),
) );
$wp_customize->add_section(
'talon_header_type',
array(
'title' => __('Header type', 'talon'),
'priority' => 10,
'panel' => 'talon_header_panel',
)
);
//Front page
$wp_customize->add_setting(
'front_header_type',
array(
'default' => $defaults['front_header_type'],
'sanitize_callback' => 'talon_sanitize_header',
)
);
$wp_customize->add_control(
'front_header_type',
array(
'type' => 'radio',
'label' => __('Homepage header type', 'talon'),
'section' => 'talon_header_type',
'description' => __('This option refers only to your homepage', 'talon'),
'choices' => array(
'has-slider' => __('Slider', 'talon'),
'has-image' => __('Image', 'talon'),
'has-video' => __('Video', 'talon'),
'nothing' => __('Only menu', 'talon')
),
)
);
//Site
$wp_customize->add_setting(
'site_header_type',
array(
'default' => $defaults['site_header_type'],
'sanitize_callback' => 'talon_sanitize_header',
)
);
$wp_customize->add_control(
'site_header_type',
array(
'type' => 'radio',
'label' => __('Site header type', 'talon'),
'section' => 'talon_header_type',
'description' => __('This option refers to all pages except your homepage', 'talon'),
'choices' => array(
'has-slider' => __('Slider', 'talon'),
'has-image' => __('Image', 'talon'),
'has-video' => __('Video', 'talon'),
'nothing' => __('Only menu', 'talon')
),
)
);
//___Slider___//
$wp_customize->add_section(
'talon_slider',
array(
'title' => __('Header Slider', 'talon'),
'description' => __('Configure your header slider here, then go to Header Area > Header Type and choose where you want to display it.', 'talon'),
'priority' => 11,
'panel' => 'talon_header_panel',
)
);
//Speed
$wp_customize->add_setting(
'slider_speed',
array(
'default' => $defaults['slider_speed'],
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'slider_speed',
array(
'label' => __( 'Slider speed', 'talon' ),
'section' => 'talon_slider',
'type' => 'number',
'description' => __('Slider speed in miliseconds [default: 4000]', 'talon'),
'priority' => 7
)
);
for ($c = 1; $c <= 3; $c++) {
$wp_customize->add_control( new Talon_Info( $wp_customize, 'slide' . $c, array(
'label' => __('Slide ', 'talon') . $c,
'section' => 'talon_slider',
'settings' => array(),
'priority' => 10
) )
);
$wp_customize->add_setting(
'slide_image_' . $c,
array(
'default' => $defaults['slide_image_' . $c],
'sanitize_callback' => 'esc_url_raw',
)
);
$wp_customize->add_control(
new WP_Customize_Image_Control(
$wp_customize,
'slide_image_' . $c,
array(
'label' => __( 'Upload your image', 'talon' ),
'type' => 'image',
'section' => 'talon_slider',
'priority' => 10,
)
)
);
$wp_customize->add_setting(
'slide_title_' . $c,
array(
'sanitize_callback' => 'talon_sanitize_text',
)
);
$wp_customize->add_control(
'slide_title_' . $c,
array(
'label' => __( 'Slide title', 'talon' ),
'section' => 'talon_slider',
'type' => 'text',
'priority' => 10
)
);
$wp_customize->add_setting(
'slide_subtitle_' . $c,
array(
'sanitize_callback' => 'talon_sanitize_text',
)
);
$wp_customize->add_control(
'slide_subtitle_' . $c,
array(
'label' => __( 'Slide subtitle', 'talon' ),
'section' => 'talon_slider',
'type' => 'text',
'priority' => 10
)
);
$wp_customize->add_setting(
'slide_btn_url_' . $c,
array(
'sanitize_callback' => 'esc_url_raw',
)
);
$wp_customize->add_control(
'slide_btn_url_' . $c,
array(
'label' => __( 'Button URL', 'talon' ),
'section' => 'talon_slider',
'type' => 'text',
'priority' => 10
)
);
$wp_customize->add_setting(
'slide_btn_title_' . $c,
array(
'sanitize_callback' => 'talon_sanitize_text',
)
);
$wp_customize->add_control(
'slide_btn_title_' . $c,
array(
'label' => __( 'Button text', 'talon' ),
'section' => 'talon_slider',
'type' => 'text',
'priority' => 10
)
);
}
//Menu style
$wp_customize->add_section(
'talon_menu_style',
array(
'title' => __('Menu style', 'talon'),
'priority' => 16,
'panel' => 'talon_header_panel',
)
);
//Sticky menu
$wp_customize->add_setting(
'sticky_menu',
array(
'default' => $defaults['sticky_menu'],
'sanitize_callback' => 'talon_sanitize_sticky',
)
);
$wp_customize->add_control(
'sticky_menu',
array(
'type' => 'radio',
'priority' => 10,
'label' => __('Sticky menu', 'talon'),
'section' => 'talon_menu_style',
'choices' => array(
'sticky' => __('Sticky', 'talon'),
'static' => __('Static', 'talon'),
),
)
);
//Menu style
$wp_customize->add_setting(
'menu_style',
array(
'default' => $defaults['menu_style'],
'sanitize_callback' => 'talon_sanitize_menu_style',
//'transport' => 'postMessage'
)
);
$wp_customize->add_control(
'menu_style',
array(
'type' => 'radio',
'priority' => 11,
'label' => __('Menu style', 'talon'),
'section' => 'talon_menu_style',
'choices' => array(
'inline' => __('Inline', 'talon'),
'centered' => __('Centered', 'talon'),
),
)
);
/**
* Colors
*/
$wp_customize->add_setting(
'primary_color',
array(
'default' => $defaults['primary_color'],
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'primary_color',
array(
'label' => __('Primary color', 'talon'),
'section' => 'colors',
'priority' => 11
)
)
);
$wp_customize->add_setting(
'site_title_color',
array(
'default' => $defaults['site_title_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'site_title_color',
array(
'label' => __('Site title', 'talon'),
'section' => 'colors',
'priority' => 12
)
)
);
$wp_customize->add_setting(
'site_desc_color',
array(
'default' => $defaults['site_desc_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'site_desc_color',
array(
'label' => __('Site description', 'talon'),
'section' => 'colors',
'priority' => 13
)
)
);
$wp_customize->add_setting(
'site_header_color',
array(
'default' => $defaults['site_header_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'site_header_color',
array(
'label' => __('Header (menu background)', 'talon'),
'section' => 'colors',
'priority' => 14
)
)
);
$wp_customize->add_setting(
'menu_items_color',
array(
'default' => $defaults['menu_items_color'],
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'menu_items_color',
array(
'label' => __('Menu items', 'talon'),
'section' => 'colors',
'priority' => 15
)
)
);
$wp_customize->add_setting(
'header_text_color',
array(
'default' => $defaults['header_text_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'header_text_color',
array(
'label' => __('Header text', 'talon'),
'section' => 'colors',
'priority' => 16
)
)
);
$wp_customize->add_setting(
'header_subtext_color',
array(
'default' => $defaults['header_subtext_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'header_subtext_color',
array(
'label' => __('Header subtext', 'talon'),
'section' => 'colors',
'priority' => 17
)
)
);
$wp_customize->add_setting(
'footer_bg_color',
array(
'default' => $defaults['footer_bg_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'footer_bg_color',
array(
'label' => __('Footer background', 'talon'),
'section' => 'colors',
'priority' => 18
)
)
);
$wp_customize->add_setting(
'footer_color',
array(
'default' => $defaults['footer_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'footer_color',
array(
'label' => __('Footer text color', 'talon'),
'section' => 'colors',
'priority' => 19
)
)
);
$wp_customize->add_setting(
'body_color',
array(
'default' => $defaults['body_color'],
'sanitize_callback' => 'sanitize_hex_color',
'transport' => 'postMessage'
)
);
$wp_customize->add_control(
new WP_Customize_Color_Control(
$wp_customize,
'body_color',
array(
'label' => __('Body text color', 'talon'),
'section' => 'colors',
'priority' => 20
)
)
);
/**
* Fonts
*/
$wp_customize->add_panel( 'talon_typography_panel', array(
'priority' => 17,
'capability' => 'edit_theme_options',
'theme_supports' => '',
'title' => __('Fonts', 'talon'),
) );
$wp_customize->add_section(
'talon_fonts',
array(
'title' => __('Font selection', 'talon'),
'priority' => 10,
'panel' => 'talon_typography_panel',
'description' => sprintf( '%1$s%2$s. %3$s%4$s',
_x( 'Find the fonts ', 'Fonts option description', 'talon' ),
_x( 'here', 'Fonts option description', 'talon' ),
_x( 'If you need help, check the ', 'Fonts option description', 'talon' ),
_x( 'documentation', 'Fonts option description', 'talon' )
)
)
);
//Body fonts family
$wp_customize->add_setting(
'body_font_family',
array(
'sanitize_callback' => 'talon_sanitize_text',
'default' => $defaults['body_font_family'],
)
);
$wp_customize->add_control(
'body_font_family',
array(
'label' => __( 'Body font', 'talon' ),
'section' => 'talon_fonts',
'type' => 'text',
'priority' => 12
)
);
//Headings fonts family
$wp_customize->add_setting(
'headings_font_family',
array(
'sanitize_callback' => 'talon_sanitize_text',
'default' => $defaults['headings_font_family'],
)
);
$wp_customize->add_control(
'headings_font_family',
array(
'label' => __( 'Headings font', 'talon' ),
'section' => 'talon_fonts',
'type' => 'text',
'priority' => 15
)
);
$wp_customize->add_setting(
'font_weights',
array(
'default' => $defaults['font_weights'],
'sanitize_callback' => 'talon_sanitize_font_weights'
)
);
$wp_customize->add_control(
new Talon_Multiselect_Control(
$wp_customize,
'font_weights',
array(
'section' => 'talon_fonts',
'label' => __( 'Font weights to load', 'talon' ),
'choices' => array(
'300' => __( '300', 'talon' ),
'300italic' => __( '300 italic', 'talon' ),
'400' => __( '400', 'talon' ),
'400italic' => __( '400 italic', 'talon' ),
'500' => __( '500', 'talon' ),
'500italic' => __( '500 italic', 'talon' ),
'600' => __( '600', 'talon' ),
'600italic' => __( '600 italic', 'talon' )
),
'priority' => 16
)
)
);
$wp_customize->add_section(
'talon_typography',
array(
'title' => __('Typography', 'talon'),
'priority' => 11,
'panel' => 'talon_typography_panel',
)
);
// Site title
$wp_customize->add_setting(
'site_title_size',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['site_title_size'],
)
);
$wp_customize->add_control( 'site_title_size', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Site title', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// Site desc
$wp_customize->add_setting(
'site_desc_size',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['site_desc_size'],
)
);
$wp_customize->add_control( 'site_desc_size', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Site description', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// Menu items
$wp_customize->add_setting(
'menu_items',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['menu_items'],
)
);
$wp_customize->add_control( 'menu_items', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Menu items', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 40,
'step' => 1,
),
) );
// Body
$wp_customize->add_setting(
'body_size',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['body_size'],
'transport' => 'postMessage'
)
);
$wp_customize->add_control( 'body_size', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Body (sitewide)', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// SO titles
$wp_customize->add_setting(
'so_widgets_title',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['so_widgets_title'],
'transport' => 'postMessage'
)
);
$wp_customize->add_control( 'so_widgets_title', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Builder section titles', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// Index post titles
$wp_customize->add_setting(
'index_post_title',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['index_post_title'],
'transport' => 'postMessage'
)
);
$wp_customize->add_control( 'index_post_title', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Index post titles', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// Single post titles
$wp_customize->add_setting(
'single_post_title',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['single_post_title'],
'transport' => 'postMessage'
)
);
$wp_customize->add_control( 'single_post_title', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Single post titles', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
// Sidebar widget titles
$wp_customize->add_setting(
'sidebar_widgets_title',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['sidebar_widgets_title'],
'transport' => 'postMessage'
)
);
$wp_customize->add_control( 'sidebar_widgets_title', array(
'type' => 'number',
'priority' => 17,
'section' => 'talon_typography',
'label' => __('Sidebar widget titles', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 80,
'step' => 1,
),
) );
/**
* Icons
*/
$wp_customize->add_section(
'talon_icons',
array(
'title' => __('Icons', 'talon'),
'priority' => 41,
'description' => __('You can load an extra icon pack directly from a CDN by adding the URL here. Help for this is available ', 'talon') . '' . __('here', 'talon') . ''
)
);
$wp_customize->add_setting(
'icons_url',
array(
'sanitize_callback' => 'esc_url_raw',
'default' => '',
)
);
$wp_customize->add_control(
'icons_url',
array(
'label' => __( 'Icons URL', 'talon' ),
'section' => 'talon_icons',
'type' => 'text',
'priority' => 10
)
);
/**
* Footer
*/
$wp_customize->add_section(
'talon_footer',
array(
'title' => __('Footer', 'talon'),
'priority' => 21,
)
);
$wp_customize->add_setting(
'footer_widget_areas',
array(
'default' => '3',
'sanitize_callback' => 'talon_sanitize_fwidgets',
)
);
$wp_customize->add_control(
'footer_widget_areas',
array(
'type' => 'radio',
'label' => __('Footer widget area', 'talon'),
'section' => 'talon_footer',
'description' => __('Choose the number of widget areas in the footer, then go to Appearance > Widgets and add your widgets.', 'talon'),
'choices' => array(
'1' => __('One', 'talon'),
'2' => __('Two', 'talon'),
'3' => __('Three', 'talon'),
),
)
);
/**
* Blog
*/
$wp_customize->add_section(
'talon_blog',
array(
'title' => __('Blog options', 'talon'),
'priority' => 19,
)
);
// Blog layout
$wp_customize->add_setting(
'blog_layout',
array(
'default' => 'list',
'sanitize_callback' => 'talon_sanitize_blog',
)
);
$wp_customize->add_control(
'blog_layout',
array(
'type' => 'radio',
'label' => __('Blog layout', 'talon'),
'section' => 'talon_blog',
'priority' => 11,
'choices' => array(
'list' => __( 'List', 'talon' ),
'fullwidth' => __( 'Full width (no sidebar)', 'talon' ),
'masonry-layout' => __( 'Masonry (grid style)', 'talon' )
),
)
);
//Full width singles
$wp_customize->add_setting(
'fullwidth_single',
array(
'sanitize_callback' => 'talon_sanitize_checkbox',
)
);
$wp_customize->add_control(
'fullwidth_single',
array(
'type' => 'checkbox',
'label' => __('Full width single posts?', 'talon'),
'section' => 'talon_blog',
'priority' => 12,
)
);
//Excerpt
$wp_customize->add_setting(
'exc_length',
array(
'sanitize_callback' => 'absint',
'default' => $defaults['exc_length'],
)
);
$wp_customize->add_control( 'exc_length', array(
'type' => 'number',
'priority' => 13,
'section' => 'talon_blog',
'label' => __('Excerpt length', 'talon'),
'input_attrs' => array(
'min' => 10,
'max' => 200,
'step' => 5,
),
) );
$wp_customize->add_setting(
'custom_read_more',
array(
'sanitize_callback' => 'talon_sanitize_text',
)
);
$wp_customize->add_control(
'custom_read_more',
array(
'label' => __( 'Read more text', 'talon' ),
'description' => __( 'Fill this field to replace the […] with a link', 'talon' ),
'section' => 'talon_blog',
'type' => 'text',
'priority' => 14
)
);
//Meta
$wp_customize->add_setting(
'hide_meta_singles',
array(
'sanitize_callback' => 'talon_sanitize_checkbox',
'default' => 0,
)
);
$wp_customize->add_control(
'hide_meta_singles',
array(
'type' => 'checkbox',
'label' => __('Hide meta on single posts?', 'talon'),
'section' => 'talon_blog',
'priority' => 15,
)
);
$wp_customize->add_setting(
'hide_meta_index',
array(
'sanitize_callback' => 'talon_sanitize_checkbox',
'default' => 0,
)
);
$wp_customize->add_control(
'hide_meta_index',
array(
'type' => 'checkbox',
'label' => __('Hide meta on blog index?', 'talon'),
'section' => 'talon_blog',
'priority' => 16,
)
);
//Featured images
$wp_customize->add_setting(
'hide_featured_singles',
array(
'sanitize_callback' => 'talon_sanitize_checkbox',
)
);
$wp_customize->add_control(
'hide_featured_singles',
array(
'type' => 'checkbox',
'label' => __('Hide featured images on single posts?', 'talon'),
'section' => 'talon_blog',
'priority' => 17,
)
);
}
add_action( 'customize_register', 'talon_customize_register' );
/**
* Sanitize
*/
//Header type
function talon_sanitize_header( $input ) {
if ( in_array( $input, array( 'has-image', 'has-slider', 'has-video', 'nothing' ), true ) ) {
return $input;
}
}
//Text
function talon_sanitize_text( $input ) {
return wp_kses_post( force_balance_tags( $input ) );
}
//Checkboxes
function talon_sanitize_checkbox( $input ) {
if ( $input == 1 ) {
return 1;
} else {
return '';
}
}
//Menu style
function talon_sanitize_menu_style( $input ) {
if ( in_array( $input, array( 'inline', 'centered' ), true ) ) {
return $input;
}
}
//Menu style
function talon_sanitize_sticky( $input ) {
if ( in_array( $input, array( 'sticky', 'static' ), true ) ) {
return $input;
}
}
//Footer widget areas
function talon_sanitize_fwidgets( $input ) {
if ( in_array( $input, array( '1', '2', '3' ), true ) ) {
return $input;
}
}
//Blog layout
function talon_sanitize_blog( $input ) {
if ( in_array( $input, array( 'list', 'fullwidth', 'masonry-layout' ), true ) ) {
return $input;
}
}
//Fonts
function talon_sanitize_font_weights( $input ) {
$multi_values = !is_array( $input ) ? explode( ',', $input ) : $input;
return !empty( $multi_values ) ? array_map( 'sanitize_text_field', $multi_values ) : array();
}
/**
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
*/
function talon_customize_preview_js() {
wp_enqueue_script( 'talon_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true );
}
add_action( 'customize_preview_init', 'talon_customize_preview_js' );
/**
* Load custom controls
*/
function talon_load_customize_controls() {
require_once( trailingslashit( get_template_directory() ) . 'inc/controls/control-multicheckbox.php' );
}
add_action( 'customize_register', 'talon_load_customize_controls', 0 );