includes/customizer.php
<?php
/**
* Customizer setup
*
* @package Go\TGM
*/
namespace Go\Customizer;
use function Go\get_palette_color;
use function Go\hex_to_hsl;
/**
* Set up Customizer hooks
*
* @return void
*/
function setup() {
$n = function( $function ) {
return __NAMESPACE__ . "\\$function";
};
add_action( 'customize_register', $n( 'register_control_types' ) );
add_action( 'customize_register', $n( 'default_controls' ) );
add_action( 'customize_register', $n( 'register_site_title_controls' ) );
add_action( 'customize_register', $n( 'register_logo_controls' ) );
add_action( 'customize_register', $n( 'register_color_controls' ) );
add_action( 'customize_register', $n( 'register_global_controls' ) );
add_action( 'customize_register', $n( 'register_header_controls' ) );
add_action( 'customize_register', $n( 'register_footer_controls' ) );
add_action( 'customize_register', $n( 'register_social_controls' ) );
add_action( 'customize_register', $n( 'register_menu_controls' ) );
add_action( 'customize_register', $n( 'rename_panels' ) );
add_action( 'customize_preview_init', $n( 'customize_preview_init' ) );
add_action( 'customize_controls_enqueue_scripts', $n( 'customize_preview_init' ) );
add_action( 'customize_preview_init', $n( 'enqueue_controls_assets' ) );
add_action( 'wp_head', $n( 'inline_css' ) );
add_action( 'wp_nav_menu_args', $n( 'wp_nav_register_fallback' ) );
}
/**
* Register our custom control types.
*
* @param \WP_Customize_Manager $wp_customize The customizer object.
*
* @return void
*/
function register_control_types( \WP_Customize_Manager $wp_customize ) {
// This file is a class for our Customizer switcher control, not template partials.
// phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
require_once get_parent_theme_file_path( 'includes/classes/customizer/class-switcher-control.php' );
// This file is a class for our Customizer range control, not template partials.
// phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
require_once get_parent_theme_file_path( 'includes/classes/customizer/class-range-control.php' );
// This file is a class for our Customizer range control, not template partials.
// phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
require_once get_parent_theme_file_path( 'includes/classes/customizer/class-title-control.php' );
$wp_customize->register_control_type( Switcher_Control::class );
$wp_customize->register_control_type( Range_Control::class );
$wp_customize->register_control_type( Title_Control::class );
}
/**
* Display a placeholder in the customizer if a menu has not been assigned,
*
* @param array $args Array of nav menu arguments.
*/
function wp_nav_fallback( $args ) {
if ( ! is_customize_preview() ) {
return;
}
$registered_nav_menus = get_registered_nav_menus();
$menu_slug = $args['theme_location'];
$instance_id = $args['customize_preview_nav_menus_args']['args_hmac'];
$attributes = '';
$attrs = array(
'data-customize-partial-id' => 'nav_menu_instance[' . esc_attr( $instance_id ) . ']',
'data-customize-partial-type' => 'nav_menu_instance',
'data-customize-partial-placement-context' => wp_json_encode( $args['customize_preview_nav_menus_args'] ),
);
$attributes = implode(
' ',
array_map(
function( $key, $value ) {
return sprintf( '%s="%s"', $key, esc_attr( $value ) );
},
array_keys( $attrs ),
$attrs
)
);
printf(
'<p class="u-informational" %1$s id="menu-primary-navigation">
%2$s
</p>',
$attributes, // @codingStandardsIgnoreLine
esc_html(
sprintf(
/* translators: %s is the registered nav menu name */
__( 'Please assign a menu to the %s menu location', 'go' ),
$registered_nav_menus[ $menu_slug ]
)
)
);
}
/**
* Filter the arguments used to display a navigation menu to add our own fallback callback.
*
* @param array $args Array of wp_nav_menu() arguments.
*/
function wp_nav_register_fallback( $args ) {
$args['fallback_cb'] = __NAMESPACE__ . '\\wp_nav_fallback';
return $args;
}
/**
* Tweaks the default customizer controls.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function default_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
$wp_customize->get_setting( 'custom_logo' )->transport = 'postMessage';
if ( isset( $wp_customize->selective_refresh ) ) {
$wp_customize->selective_refresh->add_partial(
'blogname',
array(
'selector' => '.header__titles',
'render_callback' => '\\Go\\site_branding',
)
);
$wp_customize->selective_refresh->add_partial(
'blogdescription',
array(
'selector' => '.header__titles',
'render_callback' => '\\Go\\site_branding',
)
);
$wp_customize->selective_refresh->add_partial(
'custom_logo',
array(
'selector' => '.header__titles',
'render_callback' => '\\Go\\site_branding',
)
);
}
$wp_customize->remove_section( 'background_image' );
}
/**
* Enqueues the preview js for the customizer.
*
* @return void
*/
function customize_preview_init() {
$suffix = SCRIPT_DEBUG ? '' : '.min';
wp_enqueue_script(
'go-customize-preview',
get_theme_file_uri( "dist/js/admin/customize-preview{$suffix}.js" ),
array( 'jquery', 'wp-autop' ),
GO_VERSION,
true
);
wp_localize_script(
'go-customize-preview',
'GoPreviewData',
array(
'design_styles' => \Go\Core\get_available_design_styles(),
'selectedDesignStyle' => get_theme_mod( 'design_style', \Go\Core\get_default_design_style() ),
'socialIcons' => array_keys( \Go\Core\get_available_social_icons() ),
)
);
}
/**
* Enqueues the necessary controls assets
*
* @return void
*/
function enqueue_controls_assets() {
$suffix = SCRIPT_DEBUG ? '' : '.min';
$rtl = ! is_rtl() ? '' : '-rtl';
wp_enqueue_script(
'go-customize-controls',
get_theme_file_uri( "dist/js/admin/customize-controls{$suffix}.js" ),
array( 'jquery', 'wp-color-picker' ),
GO_VERSION,
true
);
$color_scheme = str_replace( get_theme_mod( 'design_style' ) . '-', '', get_theme_mod( 'color_scheme', \Go\Core\get_default_color_scheme() ) );
$available_color_schemes = \Go\Core\get_available_color_schemes();
$color_scheme_colors = array();
if ( $color_scheme && ! empty( $available_color_schemes[ $color_scheme ] ) ) {
if ( ! empty( $available_color_schemes[ $color_scheme ]['label'] ) ) {
unset( $available_color_schemes[ $color_scheme ]['label'] );
}
$color_scheme_colors = $available_color_schemes[ $color_scheme ];
}
wp_localize_script(
'go-customize-controls',
'goCustomizerControls',
array(
'availableDesignStyles' => \Go\Core\get_available_design_styles(),
'activeColorScheme' => array_values( $color_scheme_colors ),
)
);
wp_enqueue_style(
'go-customize-style',
get_theme_file_uri( "dist/css/admin/style-customize{$rtl}{$suffix}.css" ),
array(),
GO_VERSION
);
}
/**
* Returns all available color schemes for all design styles
* in an array for use in the Customizer control.
*
* @return array
*/
function get_color_schemes_as_choices() {
$design_styles = \Go\Core\get_available_design_styles();
$color_schemes = array();
array_walk(
$design_styles,
function( $style_data, $design_style ) use ( &$color_schemes ) {
array_walk(
$style_data['color_schemes'],
function( $data, $name ) use ( $design_style, &$color_schemes ) {
$color_schemes[ "{$design_style}-{$name}" ] = $data;
}
);
}
);
return $color_schemes;
}
/**
* Register the Site Title and Tagline controls.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_site_title_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->get_control( 'blogdescription' )->priority = 11;
$wp_customize->add_setting(
'hide_site_title',
array(
'default' => false,
'transport' => 'refresh',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'hide_site_title_checkbox',
array(
'label' => esc_html__( 'Hide Site Title', 'go' ),
'description' => esc_html__( 'Prevent the site title from appearing in the header area.', 'go' ),
'section' => 'title_tagline',
'settings' => 'hide_site_title',
'priority' => 10,
'type' => 'checkbox',
)
);
$wp_customize->add_setting(
'hide_site_tagline',
array(
'default' => false,
'transport' => 'refresh',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'hide_site_tagline_checkbox',
array(
'label' => esc_html__( 'Hide Tagline', 'go' ),
'description' => esc_html__( 'Prevent the site tagline from appearing in the header area.', 'go' ),
'section' => 'title_tagline',
'settings' => 'hide_site_tagline',
'priority' => 12,
'type' => 'checkbox',
)
);
}
/**
* Register the Logo Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_logo_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_setting(
'logo_width',
array(
'default' => 100,
'transport' => 'postMessage',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
new Range_Control(
$wp_customize,
'logo_width',
array(
'default' => 100,
'type' => 'go_range_control',
'label' => esc_html__( 'Width', 'go' ),
'description' => 'px',
'section' => 'title_tagline',
'priority' => 8,
'input_attrs' => array(
'min' => 40,
'max' => 300,
'step' => 2,
),
)
)
);
$wp_customize->add_setting(
'logo_width_mobile',
array(
'default' => 100,
'transport' => 'postMessage',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
new Range_Control(
$wp_customize,
'logo_width_mobile',
array(
'default' => 100,
'type' => 'go_range_control',
'label' => esc_html__( 'Mobile Width', 'go' ),
'description' => 'px',
'section' => 'title_tagline',
'priority' => 9,
'input_attrs' => array(
'min' => 40,
'max' => 200,
'step' => 2,
),
)
)
);
}
/**
* Register the Global Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_global_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_section(
'go_site_settings',
array(
'title' => esc_html__( 'Site Settings', 'go' ),
'priority' => 100,
)
);
$wp_customize->add_setting(
'page_titles',
array(
'default' => true,
'transport' => 'postMessage',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'show_page_title_checkbox',
array(
'label' => esc_html__( 'Page Titles', 'go' ),
'description' => esc_html__( 'Display page titles on individual pages that are not individually opted-out.', 'go' ),
'section' => 'go_site_settings',
'settings' => 'page_titles',
'type' => 'checkbox',
)
);
$wp_customize->add_setting(
'blog_excerpt',
array(
'default' => false,
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'blog_excerpt_checkbox',
array(
'label' => esc_html__( 'Blog Excerpt', 'go' ),
'description' => esc_html__( 'Use post excerpts on the blog page.', 'go' ),
'section' => 'go_site_settings',
'settings' => 'blog_excerpt',
'type' => 'checkbox',
)
);
$wp_customize->add_setting(
'copyright',
array(
'default' => \Go\Core\get_default_copyright(),
'transport' => 'postMessage',
'sanitize_callback' => __NAMESPACE__ . '\\copyright_kses_html',
)
);
$wp_customize->add_control(
'copyright_control',
array(
'label' => esc_html__( 'Copyright Text', 'go' ),
'section' => 'go_site_settings',
'settings' => 'copyright',
'type' => 'text',
)
);
}
/**
* Callback to retrieve the copyright kses HTML
*
* @param string $input Input value.
* @return string Filtered $input value.
*/
function copyright_kses_html( $input ) {
return wp_kses( $input, \Go\get_copyright_kses_html() );
}
/**
* Register the Global Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_color_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_setting(
'design_style',
array(
'default' => \Go\Core\get_default_design_style(),
'transport' => 'postMessage',
'sanitize_callback' => __NAMESPACE__ . '\\sanitize_radio',
)
);
$wp_customize->add_control(
'design_style_control',
array(
'label' => esc_html__( 'Design Style', 'go' ),
'description' => esc_html__( 'Choose a style, select a color scheme and customize colors to personalize your site.', 'go' ),
'section' => 'colors',
'settings' => 'design_style',
'type' => 'radio',
'choices' => wp_list_pluck( \Go\Core\get_available_design_styles(), 'label' ),
'priority' => 1,
)
);
$wp_customize->add_setting(
'color_scheme',
array(
'transport' => 'postMessage',
'default' => \Go\Core\get_default_color_scheme(),
'sanitize_callback' => __NAMESPACE__ . '\\sanitize_radio',
)
);
$wp_customize->add_control(
new Switcher_Control(
$wp_customize,
'color_scheme_control',
array(
'label' => esc_html__( 'Color scheme', 'go' ),
'section' => 'colors',
'settings' => 'color_scheme',
'choices' => get_color_schemes_as_choices(),
'switcher_type' => 'color-scheme',
'priority' => 1,
)
)
);
$wp_customize->add_setting(
'primary_color',
array(
'transport' => 'postMessage',
'default' => \Go\get_default_palette_color( 'primary' ),
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'primary_color_control',
array(
'label' => esc_html__( 'Primary', 'go' ),
'section' => 'colors',
'settings' => 'primary_color',
'priority' => 1,
)
)
);
$wp_customize->add_setting(
'secondary_color',
array(
'transport' => 'postMessage',
'default' => \Go\get_default_palette_color( 'secondary' ),
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'secondary_color_control',
array(
'label' => esc_html__( 'Secondary', 'go' ),
'section' => 'colors',
'settings' => 'secondary_color',
'priority' => 1,
)
)
);
$wp_customize->add_setting(
'tertiary_color',
array(
'transport' => 'postMessage',
'default' => \Go\get_default_palette_color( 'tertiary' ),
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'tertiary_color_control',
array(
'label' => esc_html__( 'Tertiary', 'go' ),
'section' => 'colors',
'settings' => 'tertiary_color',
'priority' => 1,
)
)
);
// Header colors.
$wp_customize->add_setting(
'title_header_colors',
array(
'sanitize_callback' => 'esc_html',
)
);
$wp_customize->add_control(
new Title_Control(
$wp_customize,
'title_header_colors',
array(
'type' => 'go_title',
'label' => esc_html__( 'Header Colors', 'go' ),
'description' => __( 'Customize colors within the site header.', 'go' ),
'section' => 'colors',
)
)
);
$wp_customize->add_setting(
'header_background_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
'default' => \Go\get_default_palette_color( 'header_background' ),
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'header_background_color',
array(
'label' => esc_html__( 'Background', 'go' ),
'section' => 'colors',
'settings' => 'header_background_color',
)
)
);
$wp_customize->add_setting(
'header_text_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'header_text_color',
array(
'label' => esc_html__( 'Foreground', 'go' ),
'section' => 'colors',
'settings' => 'header_text_color',
)
)
);
// Footer colors.
$wp_customize->add_setting(
'title_footer_colors',
array(
'sanitize_callback' => 'esc_html',
)
);
$wp_customize->add_control(
new Title_Control(
$wp_customize,
'title_footer_colors',
array(
'type' => 'go_title',
'label' => esc_html__( 'Footer Colors', 'go' ),
'description' => __( 'Customize colors within the site footer.', 'go' ),
'section' => 'colors',
)
)
);
$wp_customize->add_setting(
'footer_background_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
'default' => \Go\get_default_palette_color( 'footer_background' ),
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_background_color',
array(
'label' => esc_html__( 'Background', 'go' ),
'section' => 'colors',
'settings' => 'footer_background_color',
)
)
);
$wp_customize->add_setting(
'footer_text_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_text_color',
array(
'label' => esc_html__( 'Foreground', 'go' ),
'section' => 'colors',
'settings' => 'footer_text_color',
)
)
);
$wp_customize->add_setting(
'footer_heading_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_heading_color',
array(
'label' => esc_html__( 'Heading', 'go' ),
'section' => 'colors',
'settings' => 'footer_heading_color',
)
)
);
$wp_customize->add_setting(
'social_icon_color',
array(
'transport' => 'postMessage',
'sanitize_callback' => 'sanitize_hex_color',
)
);
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'social_icon_color',
array(
'label' => esc_html__( 'Social Icon', 'go' ),
'section' => 'colors',
'settings' => 'social_icon_color',
)
)
);
// Footer colors.
$wp_customize->add_setting(
'title_site_styles',
array(
'sanitize_callback' => 'esc_html',
)
);
$wp_customize->add_control(
new Title_Control(
$wp_customize,
'title_site_styles',
array(
'type' => 'go_title',
'label' => esc_html__( 'Additional Design Controls', 'go' ),
'description' => __( 'Customize additional design settings.', 'go' ),
'section' => 'colors',
)
)
);
$wp_customize->add_setting(
'viewport_basis',
array(
'default' => \Go\Core\get_default_viewport_basis(),
'transport' => 'postMessage',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'viewport_basis',
array(
'default' => \Go\Core\get_default_viewport_basis(),
'type' => 'range',
'label' => esc_html__( 'Site Spacing', 'go' ),
'section' => 'colors',
'input_attrs' => array(
'min' => 500,
'max' => 2250,
'step' => 1,
),
)
);
}
/**
* Register the Header Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_header_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_section(
'go_header_settings',
array(
'title' => esc_html__( 'Header', 'go' ),
'priority' => 70,
)
);
$wp_customize->add_setting(
'header_variation',
array(
'default' => \Go\Core\get_default_header_variation(),
'transport' => 'refresh',
'sanitize_callback' => __NAMESPACE__ . '\\sanitize_radio',
)
);
$wp_customize->add_control(
new Switcher_Control(
$wp_customize,
'header_variation_control',
array(
'label' => esc_html__( 'Header', 'go' ),
'description' => esc_html__( 'Choose a header for every page on your site, then style it with the selectors below.', 'go' ),
'section' => 'go_header_settings',
'settings' => 'header_variation',
'choices' => \Go\Core\get_available_header_variations(),
)
)
);
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'header_background_color_control_alt',
array(
'label' => esc_html__( 'Background', 'go' ),
'section' => 'go_header_settings',
'settings' => 'header_background_color',
)
)
);
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'header_text_color_control_alt',
array(
'label' => esc_html__( 'Foreground', 'go' ),
'section' => 'go_header_settings',
'settings' => 'header_text_color',
)
)
);
$wp_customize->add_setting(
'sticky_header',
array(
'default' => false,
'transport' => 'refresh',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'sticky_header_checkbox',
array(
'label' => esc_html__( 'Sticky Header', 'go' ),
'description' => esc_html__( 'Set the header to sticky, so that it follows as users scroll.', 'go' ),
'section' => 'go_header_settings',
'settings' => 'sticky_header',
'type' => 'checkbox',
)
);
$wp_customize->add_setting(
'remove_search',
array(
'default' => false,
'transport' => 'refresh',
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'remove_search_checkbox',
array(
'label' => esc_html__( 'Remove Search', 'go' ),
'description' => esc_html__( 'Remove the search icon from the header.', 'go' ),
'section' => 'go_header_settings',
'settings' => 'remove_search',
'type' => 'checkbox',
)
);
}
/**
* Register the Footer Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_footer_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_section(
'go_footer_settings',
array(
'title' => esc_html__( 'Footer', 'go' ),
'priority' => 90,
)
);
$wp_customize->add_setting(
'footer_variation',
array(
'default' => \Go\Core\get_default_footer_variation(),
'transport' => 'postMessage',
'sanitize_callback' => __NAMESPACE__ . '\\sanitize_radio',
)
);
$wp_customize->add_control(
new Switcher_Control(
$wp_customize,
'footer_variation_control',
array(
'label' => esc_html__( 'Footer', 'go' ),
'description' => esc_html__( 'Choose a footer for every page on your site, then style it with the selectors below.', 'go' ),
'section' => 'go_footer_settings',
'settings' => 'footer_variation',
'choices' => \Go\Core\get_available_footer_variations(),
)
)
);
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_background_color_control_alt',
array(
'label' => esc_html__( 'Background', 'go' ),
'section' => 'go_footer_settings',
'settings' => 'footer_background_color',
)
)
);
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_text_color_alt',
array(
'label' => esc_html__( 'Foreground', 'go' ),
'section' => 'go_footer_settings',
'settings' => 'footer_text_color',
)
)
);
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'footer_heading_color_alt',
array(
'label' => esc_html__( 'Heading', 'go' ),
'section' => 'go_footer_settings',
'settings' => 'footer_heading_color',
)
)
);
}
/**
* Register the Logo Controls within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_social_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_section(
'go_social_media',
array(
'title' => esc_html__( 'Social', 'go' ),
'description' => esc_html__( 'Add social media account links to apply social icons on the site footer.', 'go' ),
'priority' => 90,
)
);
$social_icons = \Go\Core\get_available_social_icons();
foreach ( $social_icons as $key => $social_icon ) {
$wp_customize->add_setting(
sprintf( 'social_icon_%s', $key ),
array(
'transport' => 'postMessage',
'sanitize_callback' => 'esc_url_raw',
)
);
$wp_customize->add_control(
sprintf( 'social_icon_%s_control', $key ),
array(
'label' => $social_icon['label'],
'section' => 'go_social_media',
'settings' => sprintf( 'social_icon_%s', $key ),
'type' => 'url',
'input_attrs' => array(
'placeholder' => esc_url( $social_icon['placeholder'] ),
),
)
);
}
// Alternate color control.
$wp_customize->add_control(
new \WP_Customize_Color_Control(
$wp_customize,
'social_icon_color_alt',
array(
'label' => esc_html__( 'Social icon', 'go' ),
'section' => 'go_social_media',
'settings' => 'social_icon_color',
)
)
);
}
/**
* Register the menu within Customize.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function register_menu_controls( \WP_Customize_Manager $wp_customize ) {
$wp_customize->add_section(
'go_menu_behavior',
array(
'title' => __( 'Menu Behavior', 'go' ),
'panel' => 'nav_menus',
)
);
$wp_customize->add_setting(
'open_menu_on_hover',
array(
'capability' => 'edit_theme_options',
'default' => true,
'sanitize_callback' => 'absint',
)
);
$wp_customize->add_control(
'open_menu_on_hover',
array(
'label' => __( 'Show sub menus on hover.', 'go' ),
'description' => esc_html__( 'Show sub menu items on hover.', 'go' ),
'section' => 'go_menu_behavior',
'settings' => 'open_menu_on_hover',
'type' => 'checkbox',
)
);
}
/**
* Rename customizer panels.
*
* @param \WP_Customize_Manager $wp_customize The customize manager object.
*
* @return void
*/
function rename_panels( \WP_Customize_Manager $wp_customize ) {
$wp_customize->get_section( 'colors' )->title = __( 'Site Design', 'go' );
}
/**
* Sanitize a radio field setting from the customizer.
*
* @param string $value The radio field value being saved.
* @param string $setting The name of the setting being saved.
*
* @return string
*/
function sanitize_radio( $value, $setting ) {
$input = sanitize_title( $value );
$choices = $setting->manager->get_control( $setting->id . '_control' )->choices;
return array_key_exists( $input, $choices ) ? $input : $setting->default;
}
/**
* Generates the inline CSS from the Customizer settings
*
* @return void
*/
function inline_css() {
// Color palette.
$primary_color = get_palette_color( 'primary', 'HSL' );
$secondary_color = get_palette_color( 'secondary', 'HSL' );
$tertiary_color = get_palette_color( 'tertiary', 'HSL' );
$background_color = get_palette_color( 'background', 'HSL' );
// Customizer colors.
$header_background = get_palette_color( 'header_background', 'HSL' );
$header_text_color = hex_to_hsl( get_theme_mod( 'header_text_color', false ), true );
$footer_text_color = hex_to_hsl( get_theme_mod( 'footer_text_color', false ), true );
$footer_heading_color = hex_to_hsl( get_theme_mod( 'footer_heading_color', false ), true );
$footer_background = get_palette_color( 'footer_background', 'HSL' );
$social_icon_color = hex_to_hsl( get_theme_mod( 'social_icon_color', false ), true );
// Site logo width.
$logo_width = get_theme_mod( 'logo_width', '100' );
$logo_width_mobile = get_theme_mod( 'logo_width_mobile', '100' );
// Spacing.
$viewport_basis = get_theme_mod( 'viewport_basis', '1100' );
// Fonts.
$fonts = get_theme_mod( 'fonts', array() );
if ( ! empty( $fonts ) ) {
list( $font_headings, $font_body ) = array_keys( $fonts );
$font_headings = str_replace( '_heading', '', $font_headings );
$font_body = str_replace( '_body', '', $font_body );
list(
$font_heading_weights,
$font_body_weights
) = array_values( $fonts );
}
$font_size = get_theme_mod( 'font_size' );
$type_ratio = get_theme_mod( 'type_ratio' );
?>
<style>
:root {
--go--color--white: hsl(0, 0%, 100%);
<?php if ( $primary_color ) : ?>
--go--color--primary: hsl(<?php echo esc_attr( $primary_color[0] ) . ', ' . esc_attr( $primary_color[1] ) . '%, ' . esc_attr( $primary_color[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $secondary_color ) : ?>
--go--color--secondary: hsl(<?php echo esc_attr( $secondary_color[0] ) . ', ' . esc_attr( $secondary_color[1] ) . '%, ' . esc_attr( $secondary_color[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $tertiary_color ) : ?>
--go--color--tertiary: hsl(<?php echo esc_attr( $tertiary_color[0] ) . ', ' . esc_attr( $tertiary_color[1] ) . '%, ' . esc_attr( $tertiary_color[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $background_color ) : ?>
--go--color--background: hsl(<?php echo esc_attr( $background_color[0] ) . ', ' . esc_attr( $background_color[1] ) . '%, ' . esc_attr( $background_color[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $header_background ) : ?>
--go-header--color--background: hsl(<?php echo esc_attr( $header_background[0] ) . ', ' . esc_attr( $header_background[1] ) . '%, ' . esc_attr( $header_background[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $header_text_color ) : ?>
--go-site-title--color--text: hsl(<?php echo esc_attr( $header_text_color ); ?>);
--go-site-description--color--text: hsl(<?php echo esc_attr( $header_text_color ); ?>);
--go-navigation--color--text: hsl(<?php echo esc_attr( $header_text_color ); ?>);
--go-search-toggle--color--text: hsl(<?php echo esc_attr( $header_text_color ); ?>);
--go-search-button--color--background: hsl(<?php echo esc_attr( $header_text_color ); ?>);
<?php endif; ?>
<?php if ( $footer_background ) : ?>
--go-footer--color--background: hsl(<?php echo esc_attr( $footer_background[0] ) . ', ' . esc_attr( $footer_background[1] ) . '%, ' . esc_attr( $footer_background[2] ) . '%'; ?>);
<?php endif; ?>
<?php if ( $footer_heading_color ) : ?>
--go-footer-heading--color--text: hsl(<?php echo esc_attr( $footer_heading_color ); ?>);
<?php endif; ?>
<?php if ( $footer_text_color ) : ?>
--go-footer--color--text: hsl(<?php echo esc_attr( $footer_text_color ); ?>);
--go-footer-navigation--color--text: hsl(<?php echo esc_attr( $footer_text_color ); ?>);
<?php endif; ?>
<?php if ( $social_icon_color ) : ?>
--go-social--color--text: hsl(<?php echo esc_attr( $social_icon_color ); ?>);
<?php endif; ?>
<?php if ( $logo_width ) : ?>
--go-logo--max-width: <?php echo esc_attr( $logo_width ); ?>px;
<?php endif; ?>
<?php if ( $logo_width_mobile ) : ?>
--go-logo-mobile--max-width: <?php echo esc_attr( $logo_width_mobile ); ?>px;
<?php endif; ?>
<?php if ( $viewport_basis ) : ?>
--go--viewport-basis: <?php echo esc_attr( $viewport_basis ); ?>;
<?php endif; ?>
<?php if ( isset( $font_headings, $font_body ) ) : ?>
--go-heading--font-family: <?php echo esc_attr( $font_headings ); ?>;
--go--font-family: <?php echo esc_attr( $font_body ); ?>;
<?php endif; ?>
<?php if ( $font_size ) : ?>
--go--font-size: <?php echo esc_attr( $font_size ); ?>;
<?php endif; ?>
<?php if ( $type_ratio ) : ?>
--go--type-ratio: <?php echo esc_attr( $type_ratio ); ?>;
<?php endif; ?>
<?php if ( ! empty( $font_heading_weights ) ) : ?>
--go-heading--font-weight: <?php echo esc_attr( $font_heading_weights[0] ); ?>;
<?php endif; ?>
<?php if ( ! empty( $font_body_weights ) ) : ?>
--go--font-weight: <?php echo esc_attr( $font_body_weights[0] ); ?>;
<?php endif; ?>
}
.has-primary-to-secondary-gradient-background {
background: -webkit-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--secondary) 100%);
background: -o-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--secondary) 100%);
background: linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--secondary) 100%);
}
.has-primary-to-tertiary-gradient-background {
background: -webkit-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--tertiary) 100%);
background: -o-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--tertiary) 100%);
background: linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--tertiary) 100%);
}
.has-primary-to-background-gradient-background {
background: -webkit-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--background) 100%);
background: -o-linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--background) 100%);
background: linear-gradient(135deg, var(--go--color--primary) 0%, var(--go--color--background) 100%);
}
.has-secondary-to-tertiary-gradient-background {
background: -webkit-linear-gradient(135deg, var(--go--color--secondary) 0%, var(--go--color--tertiary) 100%);
background: -o-linear-gradient(135deg, var(--go--color--secondary) 0%, var(--go--color--tertiary) 100%);
background: linear-gradient(135deg, var(--go--color--secondary) 0%, var(--go--color--tertiary) 100%);
}
</style>
<?php
}