diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2016-08-16 09:02:43 -0400 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2016-08-16 09:04:16 -0400 |
commit | ca2931bbb7ea682e3cdbc1775737d1e6897974ab (patch) | |
tree | 1a68e9c1988a78bcc8f8f42fb64f9bce5ee3be08 /themes/twentysixteen/inc | |
parent | Update plugin jetpack to 4.1.1 (diff) | |
download | blogs-gentoo-ca2931bbb7ea682e3cdbc1775737d1e6897974ab.tar.gz blogs-gentoo-ca2931bbb7ea682e3cdbc1775737d1e6897974ab.tar.bz2 blogs-gentoo-ca2931bbb7ea682e3cdbc1775737d1e6897974ab.zip |
Update to twentyfourteen-1.8 twentyfifteen-1.6 twentysixteen-1.3
Diffstat (limited to 'themes/twentysixteen/inc')
-rw-r--r-- | themes/twentysixteen/inc/back-compat.php | 71 | ||||
-rw-r--r-- | themes/twentysixteen/inc/customizer.php | 1193 | ||||
-rw-r--r-- | themes/twentysixteen/inc/template-tags.php | 254 |
3 files changed, 1518 insertions, 0 deletions
diff --git a/themes/twentysixteen/inc/back-compat.php b/themes/twentysixteen/inc/back-compat.php new file mode 100644 index 00000000..7ed4240c --- /dev/null +++ b/themes/twentysixteen/inc/back-compat.php @@ -0,0 +1,71 @@ +<?php +/** + * Twenty Sixteen back compat functionality + * + * Prevents Twenty Sixteen from running on WordPress versions prior to 4.4, + * since this theme is not meant to be backward compatible beyond that and + * relies on many newer functions and markup changes introduced in 4.4. + * + * @package WordPress + * @subpackage Twenty_Sixteen + * @since Twenty Sixteen 1.0 + */ + +/** + * Prevent switching to Twenty Sixteen on old versions of WordPress. + * + * Switches to the default theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_switch_theme() { + switch_theme( WP_DEFAULT_THEME, WP_DEFAULT_THEME ); + + unset( $_GET['activated'] ); + + add_action( 'admin_notices', 'twentysixteen_upgrade_notice' ); +} +add_action( 'after_switch_theme', 'twentysixteen_switch_theme' ); + +/** + * Adds a message for unsuccessful theme switch. + * + * Prints an update nag after an unsuccessful attempt to switch to + * Twenty Sixteen on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_upgrade_notice() { + $message = sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ); + printf( '<div class="error"><p>%s</p></div>', $message ); +} + +/** + * Prevents the Customizer from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_customize() { + wp_die( sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ), '', array( + 'back_link' => true, + ) ); +} +add_action( 'load-customize.php', 'twentysixteen_customize' ); + +/** + * Prevents the Theme Preview from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentysixteen_preview' ); diff --git a/themes/twentysixteen/inc/customizer.php b/themes/twentysixteen/inc/customizer.php new file mode 100644 index 00000000..62eb1b0b --- /dev/null +++ b/themes/twentysixteen/inc/customizer.php @@ -0,0 +1,1193 @@ +<?php +/** + * Twenty Sixteen Customizer functionality + * + * @package WordPress + * @subpackage Twenty_Sixteen + * @since Twenty Sixteen 1.0 + */ + +/** + * Sets up the WordPress core custom header and custom background features. + * + * @since Twenty Sixteen 1.0 + * + * @see twentysixteen_header_style() + */ +function twentysixteen_custom_header_and_background() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_background_color = trim( $color_scheme[0], '#' ); + $default_text_color = trim( $color_scheme[3], '#' ); + + /** + * Filter the arguments used when adding 'custom-background' support in Twenty Sixteen. + * + * @since Twenty Sixteen 1.0 + * + * @param array $args { + * An array of custom-background support arguments. + * + * @type string $default-color Default color of the background. + * } + */ + add_theme_support( 'custom-background', apply_filters( 'twentysixteen_custom_background_args', array( + 'default-color' => $default_background_color, + ) ) ); + + /** + * Filter the arguments used when adding 'custom-header' support in Twenty Sixteen. + * + * @since Twenty Sixteen 1.0 + * + * @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 280. + * @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( 'twentysixteen_custom_header_args', array( + 'default-text-color' => $default_text_color, + 'width' => 1200, + 'height' => 280, + 'flex-height' => true, + 'wp-head-callback' => 'twentysixteen_header_style', + ) ) ); +} +add_action( 'after_setup_theme', 'twentysixteen_custom_header_and_background' ); + +if ( ! function_exists( 'twentysixteen_header_style' ) ) : +/** + * Styles the header text displayed on the site. + * + * Create your own twentysixteen_header_style() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @see twentysixteen_custom_header_and_background(). + */ +function twentysixteen_header_style() { + // If the header text option is untouched, let's bail. + if ( display_header_text() ) { + return; + } + + // If the header text has been hidden. + ?> + <style type="text/css" id="twentysixteen-header-css"> + .site-branding { + margin: 0 auto 0 0; + } + + .site-branding .site-title, + .site-description { + clip: rect(1px, 1px, 1px, 1px); + position: absolute; + } + </style> + <?php +} +endif; // twentysixteen_header_style + +/** + * Adds postMessage support for site title and description for the Customizer. + * + * @since Twenty Sixteen 1.0 + * + * @param WP_Customize_Manager $wp_customize The Customizer object. + */ +function twentysixteen_customize_register( $wp_customize ) { + $color_scheme = twentysixteen_get_color_scheme(); + + $wp_customize->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' => 'twentysixteen_customize_partial_blogname', + ) ); + $wp_customize->selective_refresh->add_partial( 'blogdescription', array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentysixteen_customize_partial_blogdescription', + ) ); + } + + // Add color scheme setting and control. + $wp_customize->add_setting( 'color_scheme', array( + 'default' => 'default', + 'sanitize_callback' => 'twentysixteen_sanitize_color_scheme', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( 'color_scheme', array( + 'label' => __( 'Base Color Scheme', 'twentysixteen' ), + 'section' => 'colors', + 'type' => 'select', + 'choices' => twentysixteen_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', 'twentysixteen' ), + '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', 'twentysixteen' ), + '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', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); + + // Add secondary text color setting and control. + $wp_customize->add_setting( 'secondary_text_color', array( + 'default' => $color_scheme[4], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'secondary_text_color', array( + 'label' => __( 'Secondary Text Color', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); +} +add_action( 'customize_register', 'twentysixteen_customize_register', 11 ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Registers color schemes for Twenty Sixteen. + * + * Can be filtered with {@see 'twentysixteen_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. Secondary Text Color. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of color scheme options. + */ +function twentysixteen_get_color_schemes() { + /** + * Filter the color schemes registered for use with Twenty Sixteen. + * + * The default schemes include 'default', 'dark', 'gray', 'red', and 'yellow'. + * + * @since Twenty Sixteen 1.0 + * + * @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, secondary text. + * } + * } + */ + return apply_filters( 'twentysixteen_color_schemes', array( + 'default' => array( + 'label' => __( 'Default', 'twentysixteen' ), + 'colors' => array( + '#1a1a1a', + '#ffffff', + '#007acc', + '#1a1a1a', + '#686868', + ), + ), + 'dark' => array( + 'label' => __( 'Dark', 'twentysixteen' ), + 'colors' => array( + '#262626', + '#1a1a1a', + '#9adffd', + '#e5e5e5', + '#c1c1c1', + ), + ), + 'gray' => array( + 'label' => __( 'Gray', 'twentysixteen' ), + 'colors' => array( + '#616a73', + '#4d545c', + '#c7c7c7', + '#f2f2f2', + '#f2f2f2', + ), + ), + 'red' => array( + 'label' => __( 'Red', 'twentysixteen' ), + 'colors' => array( + '#ffffff', + '#ff675f', + '#640c1f', + '#402b30', + '#402b30', + ), + ), + 'yellow' => array( + 'label' => __( 'Yellow', 'twentysixteen' ), + 'colors' => array( + '#3b3721', + '#ffef8e', + '#774e24', + '#3b3721', + '#5b4d3e', + ), + ), + ) ); +} + +if ( ! function_exists( 'twentysixteen_get_color_scheme' ) ) : +/** + * Retrieves the current Twenty Sixteen color scheme. + * + * Create your own twentysixteen_get_color_scheme() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of either the current or default color scheme HEX values. + */ +function twentysixteen_get_color_scheme() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + $color_schemes = twentysixteen_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; // twentysixteen_get_color_scheme + +if ( ! function_exists( 'twentysixteen_get_color_scheme_choices' ) ) : +/** + * Retrieves an array of color scheme choices registered for Twenty Sixteen. + * + * Create your own twentysixteen_get_color_scheme_choices() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array Array of color schemes. + */ +function twentysixteen_get_color_scheme_choices() { + $color_schemes = twentysixteen_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; // twentysixteen_get_color_scheme_choices + + +if ( ! function_exists( 'twentysixteen_sanitize_color_scheme' ) ) : +/** + * Handles sanitization for Twenty Sixteen color schemes. + * + * Create your own twentysixteen_sanitize_color_scheme() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @param string $value Color scheme name value. + * @return string Color scheme name. + */ +function twentysixteen_sanitize_color_scheme( $value ) { + $color_schemes = twentysixteen_get_color_scheme_choices(); + + if ( ! array_key_exists( $value, $color_schemes ) ) { + return 'default'; + } + + return $value; +} +endif; // twentysixteen_sanitize_color_scheme + +/** + * Enqueues front-end CSS for color scheme. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_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 = twentysixteen_get_color_scheme(); + + // Convert main text hex color to rgba. + $color_textcolor_rgb = twentysixteen_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], + 'secondary_text_color' => $color_scheme[4], + 'border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $color_textcolor_rgb ), + + ); + + $color_scheme_css = twentysixteen_get_color_scheme_css( $colors ); + + wp_add_inline_style( 'twentysixteen-style', $color_scheme_css ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_color_scheme_css' ); + +/** + * Binds the JS listener to make Customizer color_scheme control. + * + * Passes color scheme data as colorScheme global. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_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' ), '20160816', true ); + wp_localize_script( 'color-scheme-control', 'colorScheme', twentysixteen_get_color_schemes() ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentysixteen_customize_control_js' ); + +/** + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_customize_preview_js() { + wp_enqueue_script( 'twentysixteen-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20160816', true ); +} +add_action( 'customize_preview_init', 'twentysixteen_customize_preview_js' ); + +/** + * Returns CSS for the color schemes. + * + * @since Twenty Sixteen 1.0 + * + * @param array $colors Color scheme colors. + * @return string Color scheme CSS. + */ +function twentysixteen_get_color_scheme_css( $colors ) { + $colors = wp_parse_args( $colors, array( + 'background_color' => '', + 'page_background_color' => '', + 'link_color' => '', + 'main_text_color' => '', + 'secondary_text_color' => '', + 'border_color' => '', + ) ); + + return <<<CSS + /* Color Scheme */ + + /* Background Color */ + body { + background-color: {$colors['background_color']}; + } + + /* Page Background Color */ + .site { + background-color: {$colors['page_background_color']}; + } + + mark, + ins, + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination .prev, + .pagination .next, + .pagination .prev:hover, + .pagination .prev:focus, + .pagination .next:hover, + .pagination .next:focus, + .pagination .nav-links:before, + .pagination .nav-links:after, + .widget_calendar tbody a, + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus, + .page-links a, + .page-links a:hover, + .page-links a:focus { + color: {$colors['page_background_color']}; + } + + /* Link Color */ + .menu-toggle:hover, + .menu-toggle:focus, + a, + .main-navigation a:hover, + .main-navigation a:focus, + .dropdown-toggle:hover, + .dropdown-toggle:focus, + .social-navigation a:hover:before, + .social-navigation a:focus:before, + .post-navigation a:hover .post-title, + .post-navigation a:focus .post-title, + .tagcloud a:hover, + .tagcloud a:focus, + .site-branding .site-title a:hover, + .site-branding .site-title a:focus, + .entry-title a:hover, + .entry-title a:focus, + .entry-footer a:hover, + .entry-footer a:focus, + .comment-metadata a:hover, + .comment-metadata a:focus, + .pingback .comment-edit-link:hover, + .pingback .comment-edit-link:focus, + .comment-reply-link, + .comment-reply-link:hover, + .comment-reply-link:focus, + .required, + .site-info a:hover, + .site-info a:focus { + color: {$colors['link_color']}; + } + + mark, + ins, + button:hover, + button:focus, + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"]:hover, + input[type="submit"]:focus, + .pagination .prev:hover, + .pagination .prev:focus, + .pagination .next:hover, + .pagination .next:focus, + .widget_calendar tbody a, + .page-links a:hover, + .page-links a:focus { + background-color: {$colors['link_color']}; + } + + input[type="date"]:focus, + input[type="time"]:focus, + input[type="datetime-local"]:focus, + input[type="week"]:focus, + input[type="month"]:focus, + input[type="text"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="password"]:focus, + input[type="search"]:focus, + input[type="tel"]:focus, + input[type="number"]:focus, + textarea:focus, + .tagcloud a:hover, + .tagcloud a:focus, + .menu-toggle:hover, + .menu-toggle:focus { + border-color: {$colors['link_color']}; + } + + /* Main Text Color */ + body, + blockquote cite, + blockquote small, + .main-navigation a, + .menu-toggle, + .dropdown-toggle, + .social-navigation a, + .post-navigation a, + .pagination a:hover, + .pagination a:focus, + .widget-title a, + .site-branding .site-title a, + .entry-title a, + .page-links > .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: {$colors['main_text_color']}; + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: {$colors['main_text_color']}; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: {$colors['main_text_color']}; + } + + /* Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: {$colors['secondary_text_color']}; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: {$colors['secondary_text_color']}; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: {$colors['secondary_text_color']}; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="week"], + input[type="month"], + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="number"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['border_color']}; + } + + hr, + code { + background-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + background-color: {$colors['border_color']}; + } + + @media screen and (min-width: 56.875em) { + .main-navigation li:hover > a, + .main-navigation li.focus > a { + color: {$colors['link_color']}; + } + + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: {$colors['border_color']}; + } + + .main-navigation ul ul:before { + border-top-color: {$colors['border_color']}; + border-bottom-color: {$colors['border_color']}; + } + + .main-navigation ul ul li { + background-color: {$colors['page_background_color']}; + } + + .main-navigation ul ul:after { + border-top-color: {$colors['page_background_color']}; + border-bottom-color: {$colors['page_background_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. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_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 }}', + 'secondary_text_color' => '{{ data.secondary_text_color }}', + 'border_color' => '{{ data.border_color }}', + ); + ?> + <script type="text/html" id="tmpl-twentysixteen-color-scheme"> + <?php echo twentysixteen_get_color_scheme_css( $colors ); ?> + </script> + <?php +} +add_action( 'customize_controls_print_footer_scripts', 'twentysixteen_color_scheme_css_template' ); + +/** + * Enqueues front-end CSS for the page background color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_page_background_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[1]; + $page_background_color = get_theme_mod( 'page_background_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $page_background_color === $default_color ) { + return; + } + + $css = ' + /* Custom Page Background Color */ + .site { + background-color: %1$s; + } + + mark, + ins, + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination .prev, + .pagination .next, + .pagination .prev:hover, + .pagination .prev:focus, + .pagination .next:hover, + .pagination .next:focus, + .pagination .nav-links:before, + .pagination .nav-links:after, + .widget_calendar tbody a, + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus, + .page-links a, + .page-links a:hover, + .page-links a:focus { + color: %1$s; + } + + @media screen and (min-width: 56.875em) { + .main-navigation ul ul li { + background-color: %1$s; + } + + .main-navigation ul ul:after { + border-top-color: %1$s; + border-bottom-color: %1$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $page_background_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_page_background_color_css', 11 ); + +/** + * Enqueues front-end CSS for the link color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_link_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[2]; + $link_color = get_theme_mod( 'link_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $link_color === $default_color ) { + return; + } + + $css = ' + /* Custom Link Color */ + .menu-toggle:hover, + .menu-toggle:focus, + a, + .main-navigation a:hover, + .main-navigation a:focus, + .dropdown-toggle:hover, + .dropdown-toggle:focus, + .social-navigation a:hover:before, + .social-navigation a:focus:before, + .post-navigation a:hover .post-title, + .post-navigation a:focus .post-title, + .tagcloud a:hover, + .tagcloud a:focus, + .site-branding .site-title a:hover, + .site-branding .site-title a:focus, + .entry-title a:hover, + .entry-title a:focus, + .entry-footer a:hover, + .entry-footer a:focus, + .comment-metadata a:hover, + .comment-metadata a:focus, + .pingback .comment-edit-link:hover, + .pingback .comment-edit-link:focus, + .comment-reply-link, + .comment-reply-link:hover, + .comment-reply-link:focus, + .required, + .site-info a:hover, + .site-info a:focus { + color: %1$s; + } + + mark, + ins, + button:hover, + button:focus, + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"]:hover, + input[type="submit"]:focus, + .pagination .prev:hover, + .pagination .prev:focus, + .pagination .next:hover, + .pagination .next:focus, + .widget_calendar tbody a, + .page-links a:hover, + .page-links a:focus { + background-color: %1$s; + } + + input[type="date"]:focus, + input[type="time"]:focus, + input[type="datetime-local"]:focus, + input[type="week"]:focus, + input[type="month"]:focus, + input[type="text"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="password"]:focus, + input[type="search"]:focus, + input[type="tel"]:focus, + input[type="number"]:focus, + textarea:focus, + .tagcloud a:hover, + .tagcloud a:focus, + .menu-toggle:hover, + .menu-toggle:focus { + border-color: %1$s; + } + + @media screen and (min-width: 56.875em) { + .main-navigation li:hover > a, + .main-navigation li.focus > a { + color: %1$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $link_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_link_color_css', 11 ); + +/** + * Enqueues front-end CSS for the main text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_main_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[3]; + $main_text_color = get_theme_mod( 'main_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $main_text_color === $default_color ) { + return; + } + + // Convert main text hex color to rgba. + $main_text_color_rgb = twentysixteen_hex2rgb( $main_text_color ); + + // If the rgba values are empty return early. + if ( empty( $main_text_color_rgb ) ) { + return; + } + + // If we get this far, we have a custom color scheme. + $border_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $main_text_color_rgb ); + + $css = ' + /* Custom Main Text Color */ + body, + blockquote cite, + blockquote small, + .main-navigation a, + .menu-toggle, + .dropdown-toggle, + .social-navigation a, + .post-navigation a, + .pagination a:hover, + .pagination a:focus, + .widget-title a, + .site-branding .site-title a, + .entry-title a, + .page-links > .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: %1$s + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: %1$s; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: %1$s; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="week"], + input[type="month"], + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="tel"], + input[type="number"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: %1$s; /* Fallback for IE7 and IE8 */ + border-color: %2$s; + } + + hr, + code { + background-color: %1$s; /* Fallback for IE7 and IE8 */ + background-color: %2$s; + } + + @media screen and (min-width: 56.875em) { + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: %2$s; + } + + .main-navigation ul ul:before { + border-top-color: %2$s; + border-bottom-color: %2$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $main_text_color, $border_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_main_text_color_css', 11 ); + +/** + * Enqueues front-end CSS for the secondary text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_secondary_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[4]; + $secondary_text_color = get_theme_mod( 'secondary_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $secondary_text_color === $default_color ) { + return; + } + + $css = ' + /* Custom Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: %1$s; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: %1$s; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: %1$s; + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $secondary_text_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_secondary_text_color_css', 11 ); diff --git a/themes/twentysixteen/inc/template-tags.php b/themes/twentysixteen/inc/template-tags.php new file mode 100644 index 00000000..eb872030 --- /dev/null +++ b/themes/twentysixteen/inc/template-tags.php @@ -0,0 +1,254 @@ +<?php +/** + * Custom Twenty Sixteen template tags + * + * Eventually, some of the functionality here could be replaced by core features. + * + * @package WordPress + * @subpackage Twenty_Sixteen + * @since Twenty Sixteen 1.0 + */ + +if ( ! function_exists( 'twentysixteen_entry_meta' ) ) : +/** + * Prints HTML with meta information for the categories, tags. + * + * Create your own twentysixteen_entry_meta() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_entry_meta() { + if ( 'post' === get_post_type() ) { + $author_avatar_size = apply_filters( 'twentysixteen_author_avatar_size', 49 ); + printf( '<span class="byline"><span class="author vcard">%1$s<span class="screen-reader-text">%2$s </span> <a class="url fn n" href="%3$s">%4$s</a></span></span>', + get_avatar( get_the_author_meta( 'user_email' ), $author_avatar_size ), + _x( 'Author', 'Used before post author name.', 'twentysixteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + get_the_author() + ); + } + + if ( in_array( get_post_type(), array( 'post', 'attachment' ) ) ) { + twentysixteen_entry_date(); + } + + $format = get_post_format(); + if ( current_theme_supports( 'post-formats', $format ) ) { + printf( '<span class="entry-format">%1$s<a href="%2$s">%3$s</a></span>', + sprintf( '<span class="screen-reader-text">%s </span>', _x( 'Format', 'Used before post format.', 'twentysixteen' ) ), + esc_url( get_post_format_link( $format ) ), + get_post_format_string( $format ) + ); + } + + if ( 'post' === get_post_type() ) { + twentysixteen_entry_taxonomies(); + } + + if ( ! is_singular() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo '<span class="comments-link">'; + comments_popup_link( sprintf( __( 'Leave a comment<span class="screen-reader-text"> on %s</span>', 'twentysixteen' ), get_the_title() ) ); + echo '</span>'; + } +} +endif; + +if ( ! function_exists( 'twentysixteen_entry_date' ) ) : +/** + * Prints HTML with date information for current post. + * + * Create your own twentysixteen_entry_date() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_entry_date() { + $time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>'; + + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time><time class="updated" datetime="%3$s">%4$s</time>'; + } + + $time_string = sprintf( $time_string, + esc_attr( get_the_date( 'c' ) ), + get_the_date(), + esc_attr( get_the_modified_date( 'c' ) ), + get_the_modified_date() + ); + + printf( '<span class="posted-on"><span class="screen-reader-text">%1$s </span><a href="%2$s" rel="bookmark">%3$s</a></span>', + _x( 'Posted on', 'Used before publish date.', 'twentysixteen' ), + esc_url( get_permalink() ), + $time_string + ); +} +endif; + +if ( ! function_exists( 'twentysixteen_entry_taxonomies' ) ) : +/** + * Prints HTML with category and tags for current post. + * + * Create your own twentysixteen_entry_taxonomies() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_entry_taxonomies() { + $categories_list = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $categories_list && twentysixteen_categorized_blog() ) { + printf( '<span class="cat-links"><span class="screen-reader-text">%1$s </span>%2$s</span>', + _x( 'Categories', 'Used before category names.', 'twentysixteen' ), + $categories_list + ); + } + + $tags_list = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $tags_list ) { + printf( '<span class="tags-links"><span class="screen-reader-text">%1$s </span>%2$s</span>', + _x( 'Tags', 'Used before tag names.', 'twentysixteen' ), + $tags_list + ); + } +} +endif; + +if ( ! function_exists( 'twentysixteen_post_thumbnail' ) ) : +/** + * Displays an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + * + * Create your own twentysixteen_post_thumbnail() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_post_thumbnail() { + if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + + <div class="post-thumbnail"> + <?php the_post_thumbnail(); ?> + </div><!-- .post-thumbnail --> + + <?php else : ?> + + <a class="post-thumbnail" href="<?php the_permalink(); ?>" aria-hidden="true"> + <?php the_post_thumbnail( 'post-thumbnail', array( 'alt' => the_title_attribute( 'echo=0' ) ) ); ?> + </a> + + <?php endif; // End is_singular() +} +endif; + +if ( ! function_exists( 'twentysixteen_excerpt' ) ) : + /** + * Displays the optional excerpt. + * + * Wraps the excerpt in a div element. + * + * Create your own twentysixteen_excerpt() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @param string $class Optional. Class string of the div element. Defaults to 'entry-summary'. + */ + function twentysixteen_excerpt( $class = 'entry-summary' ) { + $class = esc_attr( $class ); + + if ( has_excerpt() || is_search() ) : ?> + <div class="<?php echo $class; ?>"> + <?php the_excerpt(); ?> + </div><!-- .<?php echo $class; ?> --> + <?php endif; + } +endif; + +if ( ! function_exists( 'twentysixteen_excerpt_more' ) && ! is_admin() ) : +/** + * Replaces "[...]" (appended to automatically generated excerpts) with ... and + * a 'Continue reading' link. + * + * Create your own twentysixteen_excerpt_more() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return string 'Continue reading' link prepended with an ellipsis. + */ +function twentysixteen_excerpt_more() { + $link = sprintf( '<a href="%1$s" class="more-link">%2$s</a>', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'twentysixteen' ), get_the_title( get_the_ID() ) ) + ); + return ' … ' . $link; +} +add_filter( 'excerpt_more', 'twentysixteen_excerpt_more' ); +endif; + +if ( ! function_exists( 'twentysixteen_categorized_blog' ) ) : +/** + * Determines whether blog/site has more than one category. + * + * Create your own twentysixteen_categorized_blog() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return bool True if there is more than one category, false otherwise. + */ +function twentysixteen_categorized_blog() { + if ( false === ( $all_the_cool_cats = get_transient( 'twentysixteen_categories' ) ) ) { + // Create an array of all the categories that are attached to posts. + $all_the_cool_cats = get_categories( array( + 'fields' => 'ids', + // We only need to know if there is more than one category. + 'number' => 2, + ) ); + + // Count the number of categories that are attached to the posts. + $all_the_cool_cats = count( $all_the_cool_cats ); + + set_transient( 'twentysixteen_categories', $all_the_cool_cats ); + } + + if ( $all_the_cool_cats > 1 ) { + // This blog has more than 1 category so twentysixteen_categorized_blog should return true. + return true; + } else { + // This blog has only 1 category so twentysixteen_categorized_blog should return false. + return false; + } +} +endif; + +/** + * Flushes out the transients used in twentysixteen_categorized_blog(). + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_category_transient_flusher() { + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + // Like, beat it. Dig? + delete_transient( 'twentysixteen_categories' ); +} +add_action( 'edit_category', 'twentysixteen_category_transient_flusher' ); +add_action( 'save_post', 'twentysixteen_category_transient_flusher' ); + +if ( ! function_exists( 'twentysixteen_the_custom_logo' ) ) : +/** + * Displays the optional custom logo. + * + * Does nothing if the custom logo is not available. + * + * @since Twenty Sixteen 1.2 + */ +function twentysixteen_the_custom_logo() { + if ( function_exists( 'the_custom_logo' ) ) { + the_custom_logo(); + } +} +endif; |