get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; $wp_customize->add_setting( 'accent_color', array( 'default' => '#24890d', 'sanitize_callback' => 'twentyfourteen_generate_accent_colors', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'accent_color', array( 'label' => __( 'Accent Color', 'twentyfourteen' ), 'section' => 'colors', 'settings' => 'accent_color', ) ) ); } add_action( 'customize_register', 'twentyfourteen_customize_register' ); /** * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. */ function twentyfourteen_customize_preview_js() { wp_enqueue_script( 'twentyfourteen_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20120827', true ); } add_action( 'customize_preview_init', 'twentyfourteen_customize_preview_js' ); /** * Generates two variants of the accent color, returns the original, and saves the others as theme mods. * * @param string $color The original color. * @return string $color The original color, sanitized. */ function twentyfourteen_generate_accent_colors( $color ) { $color = sanitize_hex_color( $color ); set_theme_mod( 'accent_lighter', twentyfourteen_adjust_color( $color, 14 ) ); set_theme_mod( 'accent_much_lighter', twentyfourteen_adjust_color( $color, 71 ) ); return $color; } /** * Tweaks the brightness of a color by adjusting the RGB values by the given interval. * * Use positive values of $steps to brighten the color and negative values to darken the color. * All three RGB values are modified by the specified steps, within the range of 0-255. The hue * is generally maintained unless the number of steps causes one value to be capped at 0 or 255. * * @param string $color The original color, in 3- or 6-digit hexadecimal form. * @param int $steps The number of steps to adjust the color by, in rgb units. * @return string $color The new color, in 6-digit hexadecimal form. */ function twentyfourteen_adjust_color( $color, $steps ) { // Convert shorthand to full hex. if ( strlen( $color ) == 3 ) { $color = str_repeat( substr( $color, 1, 1 ), 2 ) . str_repeat( substr( $color, 2, 1 ), 2 ) . str_repeat( substr( $color, 3, 1), 2 ); } // Convert hex to rgb. $rgb = array( hexdec( substr( $color, 1, 2 ) ), hexdec( substr( $color, 3, 2 ) ), hexdec( substr( $color, 5, 2 ) ) ); // Adjust color and switch back to hex. $hex = '#'; foreach ( $rgb as $c ) { $c += $steps; if ( $c > 255 ) $c = 255; elseif ( $c < 0 ) $c = 0; $hex .= str_pad( dechex( $c ), 2, '0', STR_PAD_LEFT); } return $hex; } /** * Outputs the css for the Theme Customizer options. */ function twentyfourteen_customizer_styles() { $accent_color = get_theme_mod( 'accent_color' ); // Don't do anything if the current color is the default. if ( '#24890d' === $accent_color ) return; $accent_lighter = get_theme_mod( 'accent_lighter' ); $accent_much_lighter = get_theme_mod( 'accent_much_lighter' ); $css = ''; wp_add_inline_style( 'twentyfourteen-style', $css ); } add_action( 'wp_enqueue_scripts', 'twentyfourteen_customizer_styles' );