Created
February 10, 2018 17:43
-
-
Save bewho/e21e25f517ad37e9222053d0b94bbbda to your computer and use it in GitHub Desktop.
WordPress Snippets for WordCamp Ubud 2017 https://medium.com/@jhabdas/putting-wordpress-into-hyperdrive-4705450dffc2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Implement the Custom Header feature. | |
*/ | |
require get_parent_theme_file_path( '/inc/custom-header.php' ); | |
/** | |
* Custom template tags for this theme. | |
*/ | |
require get_parent_theme_file_path( '/inc/template-tags.php' ); | |
/** | |
* Additional features to allow styling of the templates. | |
*/ | |
require get_parent_theme_file_path( '/inc/template-functions.php' ); | |
/** | |
* Customizer additions. | |
*/ | |
require get_parent_theme_file_path( '/inc/customizer.php' ); | |
/** | |
* SVG icons functions and filters. | |
*/ | |
require get_parent_theme_file_path( '/inc/icon-functions.php' ); | |
/** | |
* Twenty Seventeen functions and definitions | |
* | |
* @link https://developer.wordpress.org/themes/basics/theme-functions/ | |
* | |
* @package WordPress | |
* @subpackage Twenty_Seventeen | |
* @since 1.0 | |
*/ | |
/** | |
* Twenty Seventeen only works in WordPress 4.7 or later. | |
*/ | |
if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '<' ) ) { | |
require get_template_directory() . '/inc/back-compat.php'; | |
return; | |
} | |
/** | |
* Sets up theme defaults and registers support for various WordPress features. | |
* | |
* Note that this function is hooked into the after_setup_theme hook, which | |
* runs before the init hook. The init hook is too late for some features, such | |
* as indicating support for post thumbnails. | |
*/ | |
function twentyseventeen_setup() { | |
/* | |
* Make theme available for translation. | |
* Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/twentyseventeen | |
* If you're building a theme based on Twenty Seventeen, use a find and replace | |
* to change 'twentyseventeen' to the name of your theme in all the template files. | |
*/ | |
load_theme_textdomain( 'twentyseventeen' ); | |
// Add default posts and comments RSS feed links to head. | |
add_theme_support( 'automatic-feed-links' ); | |
/* | |
* Let WordPress manage the document title. | |
* By adding theme support, we declare that this theme does not use a | |
* hard-coded <title> tag in the document head, and expect WordPress to | |
* provide it for us. | |
*/ | |
add_theme_support( 'title-tag' ); | |
/* | |
* Enable support for Post Thumbnails on posts and pages. | |
* | |
* @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ | |
*/ | |
add_theme_support( 'post-thumbnails' ); | |
add_image_size( 'twentyseventeen-featured-image', 2000, 1200, true ); | |
add_image_size( 'twentyseventeen-thumbnail-avatar', 100, 100, true ); | |
// Set the default content width. | |
$GLOBALS['content_width'] = 525; | |
// This theme uses wp_nav_menu() in two locations. | |
register_nav_menus( array( | |
'top' => __( 'Top Menu', 'twentyseventeen' ), | |
'social' => __( 'Social Links Menu', 'twentyseventeen' ), | |
) ); | |
/* | |
* Switch default core markup for search form, comment form, and comments | |
* to output valid HTML5. | |
*/ | |
add_theme_support( 'html5', array( | |
'comment-form', | |
'comment-list', | |
'gallery', | |
'caption', | |
) ); | |
/* | |
* Enable support for Post Formats. | |
* | |
* See: https://codex.wordpress.org/Post_Formats | |
*/ | |
add_theme_support( 'post-formats', array( | |
'aside', | |
'image', | |
'video', | |
'quote', | |
'link', | |
'gallery', | |
'audio', | |
) ); | |
// Add theme support for Custom Logo. | |
add_theme_support( 'custom-logo', array( | |
'width' => 250, | |
'height' => 250, | |
'flex-width' => true, | |
) ); | |
// Add theme support for selective refresh for widgets. | |
add_theme_support( 'customize-selective-refresh-widgets' ); | |
/* | |
* This theme styles the visual editor to resemble the theme style, | |
* specifically font, colors, and column width. | |
*/ | |
add_editor_style( array( 'assets/css/editor-style.css', twentyseventeen_fonts_url() ) ); | |
// Define and register starter content to showcase the theme on new sites. | |
$starter_content = array( | |
'widgets' => array( | |
// Place three core-defined widgets in the sidebar area. | |
'sidebar-1' => array( | |
'text_business_info', | |
'search', | |
'text_about', | |
), | |
// Add the core-defined business info widget to the footer 1 area. | |
'sidebar-2' => array( | |
'text_business_info', | |
), | |
// Put two core-defined widgets in the footer 2 area. | |
'sidebar-3' => array( | |
'text_about', | |
'search', | |
), | |
), | |
// Specify the core-defined pages to create and add custom thumbnails to some of them. | |
'posts' => array( | |
'home', | |
'about' => array( | |
'thumbnail' => '{{image-sandwich}}', | |
), | |
'contact' => array( | |
'thumbnail' => '{{image-espresso}}', | |
), | |
'blog' => array( | |
'thumbnail' => '{{image-coffee}}', | |
), | |
'homepage-section' => array( | |
'thumbnail' => '{{image-espresso}}', | |
), | |
), | |
// Create the custom image attachments used as post thumbnails for pages. | |
'attachments' => array( | |
'image-espresso' => array( | |
'post_title' => _x( 'Espresso', 'Theme starter content', 'twentyseventeen' ), | |
'file' => 'assets/images/espresso.jpg', // URL relative to the template directory. | |
), | |
'image-sandwich' => array( | |
'post_title' => _x( 'Sandwich', 'Theme starter content', 'twentyseventeen' ), | |
'file' => 'assets/images/sandwich.jpg', | |
), | |
'image-coffee' => array( | |
'post_title' => _x( 'Coffee', 'Theme starter content', 'twentyseventeen' ), | |
'file' => 'assets/images/coffee.jpg', | |
), | |
), | |
// Default to a static front page and assign the front and posts pages. | |
'options' => array( | |
'show_on_front' => 'page', | |
'page_on_front' => '{{home}}', | |
'page_for_posts' => '{{blog}}', | |
), | |
// Set the front page section theme mods to the IDs of the core-registered pages. | |
'theme_mods' => array( | |
'panel_1' => '{{homepage-section}}', | |
'panel_2' => '{{about}}', | |
'panel_3' => '{{blog}}', | |
'panel_4' => '{{contact}}', | |
), | |
// Set up nav menus for each of the two areas registered in the theme. | |
'nav_menus' => array( | |
// Assign a menu to the "top" location. | |
'top' => array( | |
'name' => __( 'Top Menu', 'twentyseventeen' ), | |
'items' => array( | |
'link_home', // Note that the core "home" page is actually a link in case a static front page is not used. | |
'page_about', | |
'page_blog', | |
'page_contact', | |
), | |
), | |
// Assign a menu to the "social" location. | |
'social' => array( | |
'name' => __( 'Social Links Menu', 'twentyseventeen' ), | |
'items' => array( | |
'link_yelp', | |
'link_facebook', | |
'link_twitter', | |
'link_instagram', | |
'link_email', | |
), | |
), | |
), | |
); | |
/** | |
* Filters Twenty Seventeen array of starter content. | |
* | |
* @since Twenty Seventeen 1.1 | |
* | |
* @param array $starter_content Array of starter content. | |
*/ | |
$starter_content = apply_filters( 'twentyseventeen_starter_content', $starter_content ); | |
add_theme_support( 'starter-content', $starter_content ); | |
} | |
add_action( 'after_setup_theme', 'twentyseventeen_setup' ); | |
/** | |
* Set the content width in pixels, based on the theme's design and stylesheet. | |
* | |
* Priority 0 to make it available to lower priority callbacks. | |
* | |
* @global int $content_width | |
*/ | |
function twentyseventeen_content_width() { | |
$content_width = $GLOBALS['content_width']; | |
// Get layout. | |
$page_layout = get_theme_mod( 'page_layout' ); | |
// Check if layout is one column. | |
if ( 'one-column' === $page_layout ) { | |
if ( twentyseventeen_is_frontpage() ) { | |
$content_width = 644; | |
} elseif ( is_page() ) { | |
$content_width = 740; | |
} | |
} | |
// Check if is single post and there is no sidebar. | |
if ( is_single() && ! is_active_sidebar( 'sidebar-1' ) ) { | |
$content_width = 740; | |
} | |
/** | |
* Filter Twenty Seventeen content width of the theme. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param $content_width integer | |
*/ | |
$GLOBALS['content_width'] = apply_filters( 'twentyseventeen_content_width', $content_width ); | |
} | |
add_action( 'template_redirect', 'twentyseventeen_content_width', 0 ); | |
/** | |
* Register custom fonts. | |
*/ | |
function twentyseventeen_fonts_url() { | |
$fonts_url = ''; | |
/** | |
* Translators: If there are characters in your language that are not | |
* supported by Libre Franklin, translate this to 'off'. Do not translate | |
* into your own language. | |
*/ | |
$libre_franklin = _x( 'on', 'Libre Franklin font: on or off', 'twentyseventeen' ); | |
if ( 'off' !== $libre_franklin ) { | |
$font_families = array(); | |
$font_families[] = 'Libre Franklin:300,300i,400,400i,600,600i,800,800i'; | |
$query_args = array( | |
'family' => urlencode( implode( '|', $font_families ) ), | |
'subset' => urlencode( 'latin,latin-ext' ), | |
); | |
$fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); | |
} | |
return esc_url_raw( $fonts_url ); | |
} | |
/** | |
* Add preconnect for Google Fonts. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param array $urls URLs to print for resource hints. | |
* @param string $relation_type The relation type the URLs are printed. | |
* @return array $urls URLs to print for resource hints. | |
*/ | |
function twentyseventeen_resource_hints( $urls, $relation_type ) { | |
if ( wp_style_is( 'twentyseventeen-fonts', 'queue' ) && 'preconnect' === $relation_type ) { | |
$urls[] = array( | |
'href' => 'https://fonts.gstatic.com', | |
'crossorigin', | |
); | |
} | |
return $urls; | |
} | |
add_filter( 'wp_resource_hints', 'twentyseventeen_resource_hints', 10, 2 ); | |
/** | |
* Register widget area. | |
* | |
* @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar | |
*/ | |
function twentyseventeen_widgets_init() { | |
register_sidebar( array( | |
'name' => __( 'Sidebar', 'twentyseventeen' ), | |
'id' => 'sidebar-1', | |
'description' => __( 'Add widgets here to appear in your sidebar.', 'twentyseventeen' ), | |
'before_widget' => '<section id="%1$s" class="widget %2$s">', | |
'after_widget' => '</section>', | |
'before_title' => '<h2 class="widget-title">', | |
'after_title' => '</h2>', | |
) ); | |
register_sidebar( array( | |
'name' => __( 'Footer 1', 'twentyseventeen' ), | |
'id' => 'sidebar-2', | |
'description' => __( 'Add widgets here to appear in your footer.', 'twentyseventeen' ), | |
'before_widget' => '<section id="%1$s" class="widget %2$s">', | |
'after_widget' => '</section>', | |
'before_title' => '<h2 class="widget-title">', | |
'after_title' => '</h2>', | |
) ); | |
register_sidebar( array( | |
'name' => __( 'Footer 2', 'twentyseventeen' ), | |
'id' => 'sidebar-3', | |
'description' => __( 'Add widgets here to appear in your footer.', 'twentyseventeen' ), | |
'before_widget' => '<section id="%1$s" class="widget %2$s">', | |
'after_widget' => '</section>', | |
'before_title' => '<h2 class="widget-title">', | |
'after_title' => '</h2>', | |
) ); | |
} | |
add_action( 'widgets_init', 'twentyseventeen_widgets_init' ); | |
/** | |
* Replaces "[...]" (appended to automatically generated excerpts) with ... and | |
* a 'Continue reading' link. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @return string 'Continue reading' link prepended with an ellipsis. | |
*/ | |
function twentyseventeen_excerpt_more( $link ) { | |
if ( is_admin() ) { | |
return $link; | |
} | |
$link = sprintf( '<p class="link-more"><a href="%1$s" class="more-link">%2$s</a></p>', | |
esc_url( get_permalink( get_the_ID() ) ), | |
/* translators: %s: Name of current post */ | |
sprintf( __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'twentyseventeen' ), get_the_title( get_the_ID() ) ) | |
); | |
return ' … ' . $link; | |
} | |
add_filter( 'excerpt_more', 'twentyseventeen_excerpt_more' ); | |
/** | |
* Handles JavaScript detection. | |
* | |
* Adds a `js` class to the root `<html>` element when JavaScript is detected. | |
* | |
* @since Twenty Seventeen 1.0 | |
*/ | |
function twentyseventeen_javascript_detection() { | |
echo "<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>\n"; | |
} | |
add_action( 'wp_head', 'twentyseventeen_javascript_detection', 0 ); | |
/** | |
* Add a pingback url auto-discovery header for singularly identifiable articles. | |
*/ | |
function twentyseventeen_pingback_header() { | |
if ( is_singular() && pings_open() ) { | |
printf( '<link rel="pingback" href="%s">' . "\n", get_bloginfo( 'pingback_url' ) ); | |
} | |
} | |
add_action( 'wp_head', 'twentyseventeen_pingback_header' ); | |
/** | |
* Display custom color CSS. | |
*/ | |
function twentyseventeen_colors_css_wrap() { | |
if ( 'custom' !== get_theme_mod( 'colorscheme' ) && ! is_customize_preview() ) { | |
return; | |
} | |
require_once( get_parent_theme_file_path( '/inc/color-patterns.php' ) ); | |
$hue = absint( get_theme_mod( 'colorscheme_hue', 250 ) ); | |
?> | |
<style type="text/css" id="custom-theme-colors" <?php if ( is_customize_preview() ) { echo 'data-hue="' . $hue . '"'; } ?>> | |
<?php echo twentyseventeen_custom_colors_css(); ?> | |
</style> | |
<?php } | |
add_action( 'wp_head', 'twentyseventeen_colors_css_wrap' ); | |
/** | |
* Allows scripts to be loaded asynchronyously. | |
* | |
* @since WordCamp Ubud 2017 | |
* @global array $wc_async_script_handles | |
* @param string $tag The script's HTML tag. | |
* @param string $handle The script's registered handle. | |
* @return string Script tag enhanced with `async` attribute. | |
*/ | |
function wc_add_async_attribute_maybe( $tag, $handle ) { | |
global $wc_async_script_handles; | |
$async_script_handles = $GLOBALS['wc_async_script_handles']; | |
if ( empty( $async_script_handles ) ) { | |
return $tag; | |
} | |
foreach ( $async_script_handles as $async_handle ) { | |
if ( $async_handle === $handle ) { | |
return str_replace( ' src', 'async src', $tag ); | |
} | |
} | |
return $tag; | |
} | |
add_filter( 'script_loader_tag', 'wc_add_async_attribute_maybe', 10, 2 ); | |
/** | |
* Enqueues an asynchronyous script. | |
* | |
* @since WordCamp Ubud 2017 | |
* @global array $wc_async_script_handles | |
* @param string $handle Name of the script. Should be unique. | |
* @param [string] $src Full URL of the script, or path of the script relative | |
* to the WordPress root directory. Default value: ''. | |
*/ | |
function wc_enqueue_async_script( $handle, $src ) { | |
global $wc_async_script_handles; | |
$wc_async_script_handles[] = $handle; | |
$ver = substr( sha1_file( $src ), 0, 7 ); | |
wp_enqueue_script( $handle, $src, array(), $ver ); | |
} | |
/** | |
* Load scripts using Fetch Inject instead of wp_enqueue_script | |
* for for faster page loads and lower perceived latency. | |
* | |
* @since WordCamp Ubud 2017 | |
* @link https://wordpress.stackexchange.com/a/263733/117731 | |
* @link https://github.com/jhabdas/fetch-inject | |
* | |
*/ | |
function wc_add_inline_script() { | |
$twentyseventeen_l10n = array( | |
'quote' => twentyseventeen_get_svg( array( 'icon' => 'quote-right' ) ), | |
'expand' => __( 'Expand child menu', 'twentyseventeen' ), | |
'collapse' => __( 'Collapse child menu', 'twentyseventeen' ), | |
'icon' => twentyseventeen_get_svg( array( 'icon' => 'angle-down', 'fallback' => true ) ) | |
); | |
$jquery_script_path = '/wp-includes/js/jquery/jquery.js'; | |
$jquery_dependent_script_paths = [ | |
get_theme_file_uri( '/assets/js/global.js' ), | |
get_theme_file_uri( '/assets/js/jquery.scrollTo.js' ), | |
get_theme_file_uri( '/assets/js/skip-link-focus-fix.js' ), | |
get_theme_file_uri( '/assets/js/navigation.js' ) | |
]; | |
$lazysizes_path = get_theme_file_uri( '/assets/js/lazysizes.min.js' ); | |
$webfonts_path = twentyseventeen_fonts_url(); | |
$screen_reader_text_object_name = 'twentyseventeenScreenReaderText'; | |
$twentyseventeen_l10n_data_json = json_encode($twentyseventeen_l10n); | |
$jquery_dependent_script_paths_json = json_encode($jquery_dependent_script_paths); | |
$inline_script = <<<EOD | |
window.{$screen_reader_text_object_name} = $twentyseventeen_l10n_data_json; | |
(function () { | |
'use strict'; | |
if (!window.fetch) return; | |
/** | |
* Fetch Inject v1.6.8 | |
* Copyright (c) 2017 Josh Habdas | |
* @licence ISC | |
*/ | |
var fetchInject=function(){"use strict";const e=function(e,t,n,r,o,i,c){i=t.createElement(n),c=t.getElementsByTagName(n)[0],i.type=r.blob.type,i.appendChild(t.createTextNode(r.text)),i.onload=o(r),c?c.parentNode.insertBefore(i,c):t.head.appendChild(i)},t=function(t,n){if(!t||!Array.isArray(t))return Promise.reject(new Error("`inputs` must be an array"));if(n&&!(n instanceof Promise))return Promise.reject(new Error("`promise` must be a promise"));const r=[],o=n?[].concat(n):[],i=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>{return[e.clone().text(),e.blob()]}).then(e=>{return Promise.all(e).then(e=>{r.push({text:e[0],blob:e[1]})})}))),Promise.all(o).then(()=>{return r.forEach(t=>{i.push({then:n=>{"text/css"===t.blob.type?e(window,document,"style",t,n):e(window,document,"script",t,n)}})}),Promise.all(i)})};return t}(); | |
fetchInject([ | |
"{$lazysizes_path}", | |
"{$webfonts_path}" | |
]) | |
fetchInject( | |
$jquery_dependent_script_paths_json | |
, fetchInject([ | |
"{$jquery_script_path}" | |
])); | |
})(); | |
EOD; | |
echo "<script>{$inline_script}</script>"; | |
} | |
add_action('wp_head', 'wc_add_inline_script', 0); | |
/** | |
* Filters content. Useful for adjusting output markup. | |
* | |
* @since WordCamp Ubud 2017 | |
* @param string $content Data to be filtered. | |
* @link https://github.com/aFarkas/lazysizes | |
* @link http://stackoverflow.com/a/20499803/712334 | |
* @link http://devdocs.io/php/class.domelement | |
*/ | |
function wc_filter_content($content) { | |
// Bail if not in loop or main query | |
if ( !(in_the_loop() && is_main_query()) ) { | |
return $content; | |
} | |
// Create a DOM document and load the content into it | |
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8"); | |
$document = new DOMDocument(); | |
libxml_use_internal_errors(true); | |
$document->loadHTML(utf8_decode($content)); | |
// Query the document and modify it | |
$images = $document->getElementsByTagName('img'); | |
foreach ($images as $image) { | |
$image->removeAttribute('src'); | |
$image->setAttribute('class','lazyload'); | |
} | |
// Save and return | |
$html = $document->saveHTML(); | |
return $html; | |
} | |
add_filter('the_content', 'wc_filter_content'); | |
/** | |
* Server Push styles and Web Font | |
* @since WordCamp Ubud 2017 | |
*/ | |
// function wc_add_header_push() { | |
// $stylesheet_uri = get_stylesheet_uri(); | |
// header("Link: <{$stylesheet_uri}>; rel=preload; as=style"); | |
// } | |
// add_action('send_headers', 'wc_add_header_push'); | |
/** | |
* Inline Critical CSS. | |
* | |
* @since WordCamp Ubud 2017 | |
* @link http://stackoverflow.com/a/26151993/712334 | |
*/ | |
function wc_inline_critical_styles() { | |
$stylesheet_uri = get_stylesheet_uri(); | |
$arrContextOptions = array( | |
"ssl"=>array( | |
"verify_peer"=>false, | |
"verify_peer_name"=>false | |
) | |
); | |
$styles = file_get_contents($stylesheet_uri, false, stream_context_create($arrContextOptions)); | |
echo "<style>{$styles}</style>"; | |
} | |
add_action('wp_head', 'wc_inline_critical_styles', 0); | |
/** | |
* Enqueue scripts and styles. Chopped and screwed. | |
*/ | |
function twentyseventeen_scripts() { | |
// Add custom fonts, used in the main stylesheet. | |
// wp_enqueue_style( 'twentyseventeen-fonts', twentyseventeen_fonts_url(), array(), null ); | |
// Theme stylesheet. | |
// wp_enqueue_style( 'twentyseventeen-style', get_stylesheet_uri() ); | |
// Load the dark colorscheme. | |
if ( 'dark' === get_theme_mod( 'colorscheme', 'light' ) || is_customize_preview() ) { | |
wp_enqueue_style( 'twentyseventeen-colors-dark', get_theme_file_uri( '/assets/css/colors-dark.css' ), array( 'twentyseventeen-style' ), '1.0' ); | |
} | |
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { | |
wp_enqueue_script( 'comment-reply' ); | |
} | |
} | |
add_action( 'wp_enqueue_scripts', 'twentyseventeen_scripts' ); | |
/** | |
* Add custom image sizes attribute to enhance responsive image functionality | |
* for content images. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param string $sizes A source size value for use in a 'sizes' attribute. | |
* @param array $size Image size. Accepts an array of width and height | |
* values in pixels (in that order). | |
* @return string A source size value for use in a content image 'sizes' attribute. | |
*/ | |
function twentyseventeen_content_image_sizes_attr( $sizes, $size ) { | |
$width = $size[0]; | |
if ( 740 <= $width ) { | |
$sizes = '(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px'; | |
} | |
if ( is_active_sidebar( 'sidebar-1' ) || is_archive() || is_search() || is_home() || is_page() ) { | |
if ( ! ( is_page() && 'one-column' === get_theme_mod( 'page_options' ) ) && 767 <= $width ) { | |
$sizes = '(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px'; | |
} | |
} | |
return $sizes; | |
} | |
add_filter( 'wp_calculate_image_sizes', 'twentyseventeen_content_image_sizes_attr', 10, 2 ); | |
/** | |
* Filter the `sizes` value in the header image markup. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param string $html The HTML image tag markup being filtered. | |
* @param object $header The custom header object returned by 'get_custom_header()'. | |
* @param array $attr Array of the attributes for the image tag. | |
* @return string The filtered header image HTML. | |
*/ | |
function twentyseventeen_header_image_tag( $html, $header, $attr ) { | |
if ( isset( $attr['sizes'] ) ) { | |
$html = str_replace( $attr['sizes'], '100vw', $html ); | |
} | |
return $html; | |
} | |
add_filter( 'get_header_image_tag', 'twentyseventeen_header_image_tag', 10, 3 ); | |
/** | |
* Add custom image sizes attribute to enhance responsive image functionality | |
* for post thumbnails. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param array $attr Attributes for the image markup. | |
* @param int $attachment Image attachment ID. | |
* @param array $size Registered image size or flat array of height and width dimensions. | |
* @return string A source size value for use in a post thumbnail 'sizes' attribute. | |
*/ | |
function twentyseventeen_post_thumbnail_sizes_attr( $attr, $attachment, $size ) { | |
if ( is_archive() || is_search() || is_home() ) { | |
$attr['sizes'] = '(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px'; | |
} else { | |
$attr['sizes'] = '100vw'; | |
} | |
return $attr; | |
} | |
add_filter( 'wp_get_attachment_image_attributes', 'twentyseventeen_post_thumbnail_sizes_attr', 10, 3 ); | |
/** | |
* Use front-page.php when Front page displays is set to a static page. | |
* | |
* @since Twenty Seventeen 1.0 | |
* | |
* @param string $template front-page.php. | |
* | |
* @return string The template to be used: blank if is_home() is true (defaults to index.php), else $template. | |
*/ | |
function twentyseventeen_front_page_template( $template ) { | |
return is_home() ? '' : $template; | |
} | |
add_filter( 'frontpage_template', 'twentyseventeen_front_page_template' ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const CACHE_NAME = 'wordcamp-cache-v1' | |
const inputs = [ | |
'/', | |
'/wp-includes/js/jquery/jquery.js', | |
'/wp-content/themes/twentyseventeen/assets/js/global.js', | |
'/wp-content/themes/twentyseventeen/assets/js/jquery.scrollTo.js', | |
'/wp-content/themes/twentyseventeen/assets/js/skip-link-focus-fix.js', | |
'/wp-content/themes/twentyseventeen/assets/js/navigation.js', | |
'/wp-content/themes/twentyseventeen/assets/js/lazysizes.min.js', | |
'/wp-content/themes/twentyseventeen/assets/images/header.jpg' | |
] | |
self.addEventListener('install', evt => { | |
evt.waitUntil( | |
caches.open(CACHE_NAME).then(cache => cache.addAll(inputs)) | |
) | |
}) | |
self.addEventListener('fetch', evt => { | |
evt.respondWith( | |
caches.match(evt.request).then(res => { | |
if (res) return res | |
return fetch(evt.request.clone()).then(res => { | |
if (res && res.status === 200 && res.type === 'basic') { | |
caches.open(CACHE_NAME).then(cache => { | |
cache.put(evt.request, res.clone()) | |
}) | |
} | |
return res | |
}) | |
}) | |
) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment