$default_background_color, ) ) ); /** * Filter the arguments used when adding 'custom-header' support in cafeterrace. * * @param array $args { * An array of custom-header support arguments. * * @type string $default-text-color Default color of the header text. * @type int $width Width in pixels of the custom header image. Default 1200. * @type int $height Height in pixels of the custom header image. Default 350. * @type bool $flex-height Whether to allow flexible-height header images. Default true. * @type callable $wp-head-callback Callback function used to style the header image and text * displayed on the blog. * } */ add_theme_support( 'custom-header', apply_filters( 'cafeterrace_custom_header_args', array( 'default-text-color' => $default_text_color, 'default-image' => $default_header_image, 'width' => 1200, 'height' => 380, 'flex-width' => true, 'flex-height' => true, 'random-default' => true, 'wp-head-callback' => 'cafeterrace_header_style', ) ) ); } add_action( 'after_setup_theme', 'cafeterrace_custom_header_and_background' ); if ( ! function_exists( 'cafeterrace_header_style' ) ) : /** * Styles the header text displayed on the site. * * Create your own cafeterrace_header_style() function to override in a child theme. * * @see cafeterrace_custom_header_and_background(). */ function cafeterrace_header_style() { // If the header text option is untouched, let's bail. if ( display_header_text() ) { return; } // If the header text has been hidden. ?> get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; if ( isset( $wp_customize->selective_refresh ) ) { $wp_customize->selective_refresh->add_partial( 'blogname', array( 'selector' => '.site-title a', 'container_inclusive' => false, 'render_callback' => 'cafeterrace_customize_partial_blogname', ) ); $wp_customize->selective_refresh->add_partial( 'blogdescription', array( 'selector' => '.site-description', 'container_inclusive' => false, 'render_callback' => 'cafeterrace_customize_partial_blogdescription', ) ); } // Add color scheme setting and control. $wp_customize->add_setting( 'color_scheme', array( 'default' => 'default', 'sanitize_callback' => 'cafeterrace_sanitize_color_scheme', 'transport' => 'postMessage', ) ); $wp_customize->add_control( 'color_scheme', array( 'label' => __( 'Base Color Scheme', 'cafeterrace' ), 'section' => 'colors', 'type' => 'select', 'choices' => cafeterrace_get_color_scheme_choices(), 'priority' => 1, ) ); // Add page background color setting and control. $wp_customize->add_setting( 'page_background_color', array( 'default' => $color_scheme[1], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'page_background_color', array( 'label' => __( 'Page Background Color', 'cafeterrace' ), 'section' => 'colors', ) ) ); // Remove the core header textcolor control, as it shares the main text color. $wp_customize->remove_control( 'header_textcolor' ); // Add link color setting and control. $wp_customize->add_setting( 'link_color', array( 'default' => $color_scheme[2], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array( 'label' => __( 'Link Color', 'cafeterrace' ), 'section' => 'colors', ) ) ); // Add main text color setting and control. $wp_customize->add_setting( 'main_text_color', array( 'default' => $color_scheme[3], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'main_text_color', array( 'label' => __( 'Main Text Color', 'cafeterrace' ), 'section' => 'colors', ) ) ); // Add submit text color setting and control. $wp_customize->add_setting( 'site_description_color', array( 'default' => $color_scheme[4], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'site_description_color', array( 'label' => __( 'Site Description Color', 'cafeterrace' ), 'section' => 'colors', ) ) ); } add_action( 'customize_register', 'cafeterrace_customize_register', 11 ); /** * Render the site title for the selective refresh partial. * * @see cafeterrace_customize_register() * * @return void */ function cafeterrace_customize_partial_blogname() { bloginfo( 'name' ); } /** * Render the site tagline for the selective refresh partial. * * @see cafeterrace_customize_register() * * @return void */ function cafeterrace_customize_partial_blogdescription() { bloginfo( 'description' ); } /** * Registers color schemes for cafeterrace. * * Can be filtered with {@see 'cafeterrace_color_schemes'}. * * The order of colors in a colors array: * 1. Main Background Color. * 2. Page Background Color. * 3. Link Color. * 4. Main Text Color. * 5. Site Description Color * * @return array An associative array of color scheme options. */ function cafeterrace_get_color_schemes() { /** * Filter the color schemes registered for use with cafeterrace. * * The default schemes include 'default', 'blue', 'pink', 'orange', and 'black'. * * @param array $schemes { * Associative array of color schemes data. * * @type array $slug { * Associative array of information for setting up the color scheme. * * @type string $label Color scheme label. * @type array $colors HEX codes for default colors prepended with a hash symbol ('#'). * Colors are defined in the following order: Main background, page * background, link, main text, header footer text. * } * } */ return apply_filters( 'cafeterrace_color_schemes', array( 'default' => array( 'label' => __( 'Default', 'cafeterrace' ), 'colors' => array( '#ffffff', /* Main Background Color */ '#eaeaea', /* Pge Background Color */ '#dd0000', /* Link Text Color */ '#595959', /* Main Text Color */ '#595959' /* Site Description Color */ ), ), 'Orange' => array( 'label' => __( 'Orange', 'cafeterrace' ), 'colors' => array( '#ffffff', /* Main Background Color */ '#eaeaea', /* Pge Background Color */ '#dd8500', /* Link Text Color */ '#595959', /* Main Text Color */ '#595959' /* Site Description Color */ ), ), 'Pink' => array( 'label' => __( 'Pink', 'cafeterrace' ), 'colors' => array( '#ffffff', /* Main Background Color */ '#eaeaea', /* Pge Background Color */ '#f931c7', /* Link Text Color */ '#595959', /* Main Text Color */ '#595959' /* Site Description Color */ ), ), 'Green' => array( 'label' => __( 'Green', 'cafeterrace' ), 'colors' => array( '#ffffff', /* Main Background Color */ '#eaeaea', /* Pge Background Color */ '#10a8a3', /* Link Text Color */ '#595959', /* Main Text Color */ '#595959' /* Site Description Color */ ), ), 'Blue' => array( 'label' => __( 'Blue', 'cafeterrace' ), 'colors' => array( '#ffffff', /* Main Background Color */ '#eaeaea', /* Pge Background Color */ '#121ab5', /* Link Text Color */ '#595959', /* Main Text Color */ '#595959', /* Site Description Color */ ), ), ) ); } if ( ! function_exists( 'cafeterrace_get_color_scheme' ) ) : /** * Retrieves the current cafeterrace color scheme. * * Create your own cafeterrace_get_color_scheme() function to override in a child theme. * * @return array An associative array of either the current or default color scheme HEX values. */ function cafeterrace_get_color_scheme() { $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); $color_schemes = cafeterrace_get_color_schemes(); if ( array_key_exists( $color_scheme_option, $color_schemes ) ) { return $color_schemes[ $color_scheme_option ]['colors']; } return $color_schemes['default']['colors']; } endif; // cafeterrace_get_color_scheme if ( ! function_exists( 'cafeterrace_get_color_scheme_choices' ) ) : /** * Retrieves an array of color scheme choices registered for cafeterrace. * * Create your own cafeterrace_get_color_scheme_choices() function to override * in a child theme. * * @return array Array of color schemes. */ function cafeterrace_get_color_scheme_choices() { $color_schemes = cafeterrace_get_color_schemes(); $color_scheme_control_options = array(); foreach ( $color_schemes as $color_scheme => $value ) { $color_scheme_control_options[ $color_scheme ] = $value['label']; } return $color_scheme_control_options; } endif; // cafeterrace_get_color_scheme_choices if ( ! function_exists( 'cafeterrace_sanitize_color_scheme' ) ) : /** * Handles sanitization for cafeterrace color schemes. * * Create your own cafeterrace_sanitize_color_scheme() function to override * in a child theme. * * @param string $value Color scheme name value. * @return string Color scheme name. */ function cafeterrace_sanitize_color_scheme( $value ) { $color_schemes = cafeterrace_get_color_scheme_choices(); if ( ! array_key_exists( $value, $color_schemes ) ) { return 'default'; } return $value; } endif; // cafeterrace_sanitize_color_scheme /** * Enqueues front-end CSS for color scheme. * * @see wp_add_inline_style() */ function cafeterrace_color_scheme_css() { $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); // Don't do anything if the default color scheme is selected. if ( 'default' === $color_scheme_option ) { return; } $color_scheme = cafeterrace_get_color_scheme(); // Convert main text hex color to rgba. $color_textcolor_rgb = cafeterrace_hex2rgb( $color_scheme[3] ); // If the rgba values are empty return early. if ( empty( $color_textcolor_rgb ) ) { return; } // If we get this far, we have a custom color scheme. $colors = array( 'background_color' => $color_scheme[0], 'page_background_color' => $color_scheme[1], 'link_color' => $color_scheme[2], 'main_text_color' => $color_scheme[3], 'site_description_color' => $color_scheme[4], 'border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $color_textcolor_rgb ) ); $color_scheme_css = cafeterrace_get_color_scheme_css( $colors ); wp_add_inline_style( 'cafeterrace-style', $color_scheme_css ); } add_action( 'wp_enqueue_scripts', 'cafeterrace_color_scheme_css' ); /** * Binds the JS listener to make Customizer color_scheme control. * * Passes color scheme data as colorScheme global. * */ function cafeterrace_customize_control_js() { wp_enqueue_script( 'color-scheme-control', get_template_directory_uri() . '/js/color-scheme-control.js', array( 'customize-controls', 'iris', 'underscore', 'wp-util' ), '20160412', true ); wp_localize_script( 'color-scheme-control', 'colorScheme', cafeterrace_get_color_schemes() ); } add_action( 'customize_controls_enqueue_scripts', 'cafeterrace_customize_control_js' ); /** * Binds JS handlers to make the Customizer preview reload changes asynchronously. */ function cafeterrace_customize_preview_js() { wp_enqueue_script( 'cafeterrace-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20160412', true ); } add_action( 'customize_preview_init', 'cafeterrace_customize_preview_js' ); /** * Returns CSS for the color schemes. * * @param array $colors Color scheme colors. * @return string Color scheme CSS. */ function cafeterrace_get_color_scheme_css( $colors ) { $colors = wp_parse_args( $colors, array( 'background_color' => '', 'page_background_color' => '', 'link_color' => '', 'main_text_color' => '', 'site_description_color' => '', 'border_color' => '' ) ); return << .page-links-title, .comment-author { color: {$colors['main_text_color']}; } /* Site Description Color */ p.site-description { color: {$colors['site_description_color']}; } CSS; } /** * Outputs an Underscore template for generating CSS for the color scheme. * * The template generates the css dynamically for instant display in the * Customizer preview. */ function cafeterrace_color_scheme_css_template() { $colors = array( 'background_color' => '{{ data.background_color }}', 'page_background_color' => '{{ data.page_background_color }}', 'link_color' => '{{ data.link_color }}', 'main_text_color' => '{{ data.main_text_color }}', 'site_description_color' => '{{ data.site_description_color }}', 'border_color' => '{{ data.border_color }}' ); ?>