$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 }}'
);
?>