From 16aaa01c480e9b931c998a1aa037e1717fcb691d Mon Sep 17 00:00:00 2001 From: Daryl Koopersmith Date: Fri, 25 May 2012 21:50:01 +0000 Subject: [PATCH] Twenty Eleven theme customizer integration. props lancewillett, Otto42. fixes #20448, see #19910. git-svn-id: https://develop.svn.wordpress.org/trunk@20916 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentyeleven/inc/theme-customizer.js | 12 +++ .../themes/twentyeleven/inc/theme-options.php | 100 +++++++++++++++++- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 wp-content/themes/twentyeleven/inc/theme-customizer.js diff --git a/wp-content/themes/twentyeleven/inc/theme-customizer.js b/wp-content/themes/twentyeleven/inc/theme-customizer.js new file mode 100644 index 0000000000..ca63fdad42 --- /dev/null +++ b/wp-content/themes/twentyeleven/inc/theme-customizer.js @@ -0,0 +1,12 @@ +( function( $ ){ + wp.customize( 'blogname', function( value ) { + value.bind( function( to ) { + $( '#site-title a' ).html( to ); + } ); + } ); + wp.customize( 'blogdescription', function( value ) { + value.bind( function( to ) { + $( '#site-description' ).html( to ); + } ); + } ); +} )( jQuery ); \ No newline at end of file diff --git a/wp-content/themes/twentyeleven/inc/theme-options.php b/wp-content/themes/twentyeleven/inc/theme-options.php index 1de92a1d20..833ba4c547 100644 --- a/wp-content/themes/twentyeleven/inc/theme-options.php +++ b/wp-content/themes/twentyeleven/inc/theme-options.php @@ -441,4 +441,102 @@ function twentyeleven_layout_classes( $existing_classes ) { return array_merge( $existing_classes, $classes ); } -add_filter( 'body_class', 'twentyeleven_layout_classes' ); \ No newline at end of file +add_filter( 'body_class', 'twentyeleven_layout_classes' ); + +/** + * Implements Twenty Eleven theme options into Theme Customizer + * + * @param $wp_customize Theme Customizer object + * @return void + * + * @since Twenty Eleven 1.3 + */ +function twentyeleven_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + + $options = twentyeleven_get_theme_options(); + $defaults = twentyeleven_get_default_theme_options(); + + $wp_customize->add_setting( 'twentyeleven_theme_options[color_scheme]', array( + 'default' => $defaults['color_scheme'], + 'type' => 'option', + 'capability' => 'edit_theme_options', + ) ); + + $schemes = twentyeleven_color_schemes(); + $choices = array(); + foreach ( $schemes as $scheme ) { + $choices[ $scheme['value'] ] = $scheme['label']; + } + + $wp_customize->add_control( 'twentyeleven_color_scheme', array( + 'label' => __( 'Color Scheme', 'twentyeleven' ), + 'section' => 'colors', + 'settings' => 'twentyeleven_theme_options[color_scheme]', + 'type' => 'radio', + 'choices' => $choices, + 'priority' => 5, + ) ); + + // Link Color (added to Color Scheme section in Theme Customizer) + $wp_customize->add_setting( 'twentyeleven_theme_options[link_color]', array( + 'default' => twentyeleven_get_default_link_color( $options['color_scheme'] ), + 'type' => 'option', + 'sanitize_callback' => 'twentyeleven_sanitize_hexcolor', + 'capability' => 'edit_theme_options', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array( + 'label' => __( 'Link Color', 'twentyeleven' ), + 'section' => 'colors', + 'settings' => 'twentyeleven_theme_options[link_color]', + ) ) ); + + // Default Layout + $wp_customize->add_section( 'twentyeleven_layout', array( + 'title' => __( 'Layout', 'twentyeleven' ), + 'priority' => 50, + ) ); + + $wp_customize->add_setting( 'twentyeleven_theme_options[theme_layout]', array( + 'type' => 'option', + 'default' => $defaults['theme_layout'], + 'sanitize_callback' => 'sanitize_key', + ) ); + + $layouts = twentyeleven_layouts(); + $choices = array(); + foreach ( $layouts as $layout ) { + $choices[$layout['value']] = $layout['label']; + } + + $wp_customize->add_control( 'twentyeleven_theme_options[theme_layout]', array( + 'section' => 'twentyeleven_layout', + 'type' => 'radio', + 'choices' => $choices, + ) ); +} +add_action( 'customize_register', 'twentyeleven_customize_register' ); + +/** + * Sanitize user input hex color value + * + * @uses sanitize_hexcolor() + * @param $color string + * @return string sanitized with prefixed # character + */ +function twentyeleven_sanitize_hexcolor( $color ) { + return '#' . sanitize_hexcolor( $color ); +} + +/** + * Bind JS handlers to make Theme Customizer preview reload changes asynchronously. + * Used with blogname and blogdescription. + * + * @since Twenty Eleven 1.3 + */ +function twentyeleven_customize_preview_js() { + wp_enqueue_script( 'twentyeleven-customizer', get_template_directory_uri() . '/inc/theme-customizer.js', array( 'customize-preview' ), '20120523', true ); +} +add_action( 'customize_preview_init', 'twentyeleven_customize_preview_js' ); \ No newline at end of file