tag in the document head, and expect WordPress to
* provide it for us.
*/
add_theme_support( 'title-tag' );
// This theme uses wp_nav_menu() in two location.
register_nav_menus( array(
'primary' => esc_html__( 'Primary', 'sanse' ),
'social' => esc_html__( 'Social Links', 'sanse' ),
) );
// Add support for logo.
add_theme_support( 'custom-logo', apply_filters( 'sanse_custom_logo_arguments', array(
'height' => 90,
'width' => 90,
'flex-height' => true,
'flex-width' => true,
) ) );
/*
* Add support for selective refresh.
*
* @link https://developer.wordpress.org/themes/advanced-topics/customizer-api/#widgets-opting-in-to-selective-refresh
*/
add_theme_support( 'customize-selective-refresh-widgets' );
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support( 'html5', array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
) );
/*
* This theme styles the visual editor to resemble the theme style,
* specifically font, colors, icons, and column width.
*/
add_editor_style( array( 'assets/css/editor-style.css' ) );
}
add_action( 'after_setup_theme', 'sanse_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 sanse_content_width() {
$GLOBALS['content_width'] = apply_filters( 'sanse_content_width', 640 );
}
add_action( 'after_setup_theme', 'sanse_content_width', 0 );
/**
* Register widget area.
*
* @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
*/
function sanse_widgets_init() {
register_sidebar( array(
'name' => esc_html__( 'Footer widget area 1', 'sanse' ),
'id' => 'footer-1',
'description' => esc_html__( 'Add widgets here for footer widget area 1.', 'sanse' ),
'before_widget' => '',
'before_title' => '
',
) );
register_sidebar( array(
'name' => esc_html__( 'Footer widget area 2', 'sanse' ),
'id' => 'footer-2',
'description' => esc_html__( 'Add widgets here for footer widget area 2.', 'sanse' ),
'before_widget' => '',
'before_title' => '',
) );
register_sidebar( array(
'name' => esc_html__( 'Footer widget area 3', 'sanse' ),
'id' => 'footer-3',
'description' => esc_html__( 'Add widgets here for footer widget area 3.', 'sanse' ),
'before_widget' => '',
'before_title' => '',
) );
register_sidebar( array(
'name' => esc_html__( 'Front Page template widget area', 'sanse' ),
'id' => 'front-page',
'description' => esc_html__( 'Add widgets here for Front Page template.', 'sanse' ),
'before_widget' => '',
'before_title' => '',
) );
}
add_action( 'widgets_init', 'sanse_widgets_init' );
/**
* Handles JavaScript detection.
*
* Adds a `js` class to the root `` element when JavaScript is detected.
*
*/
function sanse_javascript_detection() {
echo "\n";
}
add_action( 'wp_head', 'sanse_javascript_detection', 0 );
/**
* Enqueue scripts and styles.
*/
function sanse_scripts() {
// Get '.min' suffix.
$suffix = sanse_get_min_suffix();
// Add parent theme styles if using child theme.
if ( is_child_theme() ) {
wp_enqueue_style( 'sanse-parent-style', trailingslashit( get_template_directory_uri() ) . 'style' . $suffix . '.css', array(), null );
}
// Add theme styles.
wp_enqueue_style( 'sanse-style', get_stylesheet_uri() );
// Add theme scripts.
wp_enqueue_script( 'sanse-navigation', get_template_directory_uri() . '/assets/js/navigation' . $suffix . '.js', array(), '20170131', true );
// Add comments script.
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'sanse_scripts' );
/**
* Filters the 'stylesheet_uri' to allow theme developers to offer a minimized version of their main
* 'style.css' file. It will detect if a 'style.min.css' file is available and use it if SCRIPT_DEBUG
* is disabled.
*
* @since 1.1.0
* @author Justin Tadlock
* @copyright Copyright (c) 2008 - 2015, Justin Tadlock
* @link http://themehybrid.com/hybrid-core
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* @param string $stylesheet_uri The URI of the active theme's stylesheet.
* @param string $stylesheet_dir_uri The directory URI of the active theme's stylesheet.
* @return string $stylesheet_uri
*/
function sanse_min_stylesheet_uri( $stylesheet_uri, $stylesheet_dir_uri ) {
// Get the minified suffix.
$suffix = sanse_get_min_suffix();
// Use the .min stylesheet if available.
if ( $suffix ) {
// Remove the stylesheet directory URI from the file name.
$stylesheet = str_replace( trailingslashit( $stylesheet_dir_uri ), '', $stylesheet_uri );
// Change the stylesheet name to 'style.min.css'.
$stylesheet = str_replace( '.css', "{$suffix}.css", $stylesheet );
// If the stylesheet exists in the stylesheet directory, set the stylesheet URI to the dev stylesheet.
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $stylesheet ) ) {
$stylesheet_uri = esc_url( trailingslashit( $stylesheet_dir_uri ) . $stylesheet );
}
}
// Return the theme stylesheet.
return $stylesheet_uri;
}
add_filter( 'stylesheet_uri', 'sanse_min_stylesheet_uri', 5, 2 );
/**
* Helper function for getting the script/style `.min` suffix for minified files.
*
* @since 1.1.0
* @return string
*/
function sanse_get_min_suffix() {
return defined( 'SCRIPT_DEBUG' ) && true === SCRIPT_DEBUG ? '' : '.min';
}
/**
* Add SVG definitions to the footer.
*
* @since 1.1.0
*/
function sanse_include_svg_icons() {
// Define SVG sprite file.
$svg_icons = get_template_directory() . '/assets/images/svg-icons.svg';
// If it exists, include it.
if ( file_exists( $svg_icons ) ) {
require_once( $svg_icons );
}
}
add_action( 'wp_footer', 'sanse_include_svg_icons', 9999 );
/**
* Change [...] to just "Read more".
*
* @since 1.0.0
* @return string $more
*/
function sanse_excerpt_more() {
/* Translators: The %s is the post title shown to screen readers. */
$text = sprintf( esc_html__( 'Read more %s', 'sanse' ), '' . esc_html( get_the_title() ) . '' );
$more = sprintf( '… %s %s', esc_url( get_permalink() ), $text, sanse_get_svg( array( 'icon' => 'next' ) ) );
return $more;
}
add_filter( 'excerpt_more', 'sanse_excerpt_more' );
/**
* Display SVG icons in social navigation.
*
* @since 1.0.0
*
* @param string $item_output The menu item output.
* @param WP_Post $item Menu item object.
* @param int $depth Depth of the menu.
* @param array $args wp_nav_menu() arguments.
* @return string Menu item with possible description.
*/
function sanse_nav_social_icons( $item_output, $item, $depth, $args ) {
// Supported social icons.
$social_icons = apply_filters( 'sanse_nav_social_icons', array(
'codepen.io' => 'codepen',
'digg.com' => 'digg',
'dribbble.com' => 'dribbble',
'dropbox.com' => 'dropbox',
'facebook.com' => 'facebook',
'flickr.com' => 'flickr',
'foursquare.com' => 'foursquare',
'plus.google.com' => 'googleplus',
'github.com' => 'github',
'instagram.com' => 'instagram',
'linkedin.com' => 'linkedin-alt',
'mailto:' => 'mail',
'pinterest.com' => 'pinterest-alt',
'getpocket.com' => 'pocket',
'polldaddy.com' => 'polldaddy',
'reddit.com' => 'reddit',
'skype.com' => 'skype',
'skype:' => 'skype',
'soundcloud.com' => 'cloud',
'spotify.com' => 'spotify',
'stumbleupon.com' => 'stumbleupon',
'tumblr.com' => 'tumblr',
'twitch.tv' => 'twitch',
'twitter.com' => 'twitter',
'vimeo.com' => 'vimeo',
'wordpress.org' => 'wordpress',
'wordpress.com' => 'wordpress',
'youtube.com' => 'youtube',
) );
// Change SVG icon inside social links menu if there is supported URL.
if ( 'social' == $args->theme_location ) {
foreach ( $social_icons as $attr => $value ) {
if ( false !== strpos( $item_output, $attr ) ) {
$item_output = str_replace( $args->link_after, '' . sanse_get_svg( array( 'icon' => esc_attr( $value ) ) ), $item_output );
}
}
}
return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'sanse_nav_social_icons', 10, 4 );
/**
* Adds custom classes to the array of body classes.
*
* @param array $classes Classes for the body element.
* @return array
*/
function sanse_body_classes( $classes ) {
// Adds a class of group-blog to blogs with more than 1 published author.
if ( is_multi_author() ) {
$classes[] = 'group-blog';
}
// Adds a class of hfeed to non-singular pages.
if ( ! is_singular() ) {
$classes[] = 'hfeed';
}
// Add the '.custom-header-image' class if the user is using a custom header image.
if ( get_header_image() ) {
$classes[] = 'custom-header-image';
}
// Add the '.no-header-text' class if there is no Site Title and Tagline.
if ( ! display_header_text() ) {
$classes[] = 'no-header-text';
}
// Footer widget area count.
$footer_widget_count = 0;
if( is_active_sidebar( 'footer-1' ) ) {
$footer_widget_count++;
}
if( is_active_sidebar( 'footer-2' ) ) {
$footer_widget_count++;
}
if( is_active_sidebar( 'footer-3' ) ) {
$footer_widget_count++;
}
$classes[] = 'footer-widgets-' . $footer_widget_count;
return $classes;
}
add_filter( 'body_class', 'sanse_body_classes' );
/**
* Implement the Custom Header feature.
*/
require get_template_directory() . '/inc/custom-header.php';
/**
* Implement the Custom Background feature.
*/
require get_template_directory() . '/inc/custom-background.php';
/**
* Custom template tags for this theme.
*/
require get_template_directory() . '/inc/template-tags.php';
/**
* Customizer additions.
*/
require get_template_directory() . '/inc/customizer.php';
/**
* Load Jetpack compatibility file.
*/
require get_template_directory() . '/inc/jetpack.php';