summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2016-08-16 09:02:43 -0400
committerAnthony G. Basile <blueness@gentoo.org>2016-08-16 09:04:16 -0400
commitca2931bbb7ea682e3cdbc1775737d1e6897974ab (patch)
tree1a68e9c1988a78bcc8f8f42fb64f9bce5ee3be08 /themes/twentysixteen/inc
parentUpdate plugin jetpack to 4.1.1 (diff)
downloadblogs-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.php71
-rw-r--r--themes/twentysixteen/inc/customizer.php1193
-rw-r--r--themes/twentysixteen/inc/template-tags.php254
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 ' &hellip; ' . $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;