commit
a942fe0acf
|
@ -5,48 +5,49 @@ $sidebar_pos = get_theme_mod( 'understrap_sidebar_position' );
|
|||
// is active and the current page is a WooCommerce page and we do
|
||||
// not render sidebars.
|
||||
$is_woocommerce = false;
|
||||
$this_page_id = get_queried_object_id();
|
||||
$this_page_id = get_queried_object_id();
|
||||
if ( class_exists( 'WooCommerce' ) ) {
|
||||
|
||||
if ( is_woocommerce() || is_shop() || get_option( 'woocommerce_shop_page_id' ) === $this_page_id ||
|
||||
get_option( 'woocommerce_cart_page_id' ) == $this_page_id || get_option( 'woocommerce_checkout_page_id' ) == $this_page_id ||
|
||||
get_option( 'woocommerce_pay_page_id' ) == $this_page_id || get_option( 'woocommerce_thanks_page_id' ) === $this_page_id ||
|
||||
get_option( 'woocommerce_myaccount_page_id' ) == $this_page_id || get_option( 'woocommerce_edit_address_page_id' ) == $this_page_id ||
|
||||
get_option( 'woocommerce_view_order_page_id' ) == $this_page_id || get_option( 'woocommerce_terms_page_id' ) == $this_page_id) {
|
||||
get_option( 'woocommerce_view_order_page_id' ) == $this_page_id || get_option( 'woocommerce_terms_page_id' ) == $this_page_id
|
||||
) {
|
||||
|
||||
$is_woocommerce = true;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if ( 'left' === $sidebar_pos || 'both' === $sidebar_pos && !$is_woocommerce ) : ?>
|
||||
<?php if ( 'left' === $sidebar_pos || 'both' === $sidebar_pos && ! $is_woocommerce ) : ?>
|
||||
<?php get_sidebar( 'left' ); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
|
||||
if ( $is_woocommerce ) {
|
||||
echo '<div class="col-md-12 content-area" id="primary">';
|
||||
} else {
|
||||
$html = '';
|
||||
if ( 'right' === $sidebar_pos || 'left' === $sidebar_pos ) {
|
||||
$html = '<div class="';
|
||||
if ( is_active_sidebar( 'right-sidebar' ) || is_active_sidebar( 'left-sidebar' ) ) {
|
||||
$html .= 'col-md-8 content-area" id="primary">';
|
||||
} else {
|
||||
$html .= 'col-md-12 content-area" id="primary">';
|
||||
}
|
||||
echo $html;
|
||||
} elseif ( is_active_sidebar( 'right-sidebar' ) && is_active_sidebar( 'left-sidebar' ) ) {
|
||||
$html = '<div class="';
|
||||
if ( 'both' === $sidebar_pos ) {
|
||||
$html .= 'col-md-6 content-area" id="primary">';
|
||||
} else {
|
||||
$html .= 'col-md-12 content-area" id="primary">';
|
||||
}
|
||||
echo $html;
|
||||
if ( $is_woocommerce ) {
|
||||
echo '<div class="col-md-12 content-area" id="primary">';
|
||||
} else {
|
||||
$html = '';
|
||||
if ( 'right' === $sidebar_pos || 'left' === $sidebar_pos ) {
|
||||
$html = '<div class="';
|
||||
if ( is_active_sidebar( 'right-sidebar' ) || is_active_sidebar( 'left-sidebar' ) ) {
|
||||
$html .= 'col-md-8 content-area" id="primary">';
|
||||
} else {
|
||||
$html .= 'col-md-12 content-area" id="primary">';
|
||||
}
|
||||
echo $html;
|
||||
} elseif ( is_active_sidebar( 'right-sidebar' ) && is_active_sidebar( 'left-sidebar' ) ) {
|
||||
$html = '<div class="';
|
||||
if ( 'both' === $sidebar_pos ) {
|
||||
$html .= 'col-md-6 content-area" id="primary">';
|
||||
} else {
|
||||
$html .= 'col-md-12 content-area" id="primary">';
|
||||
}
|
||||
echo $html;
|
||||
}
|
||||
?>
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
'menu_class' => 'nav navbar-nav',
|
||||
'fallback_cb' => '',
|
||||
'menu_id' => 'main-menu',
|
||||
'walker' => new wp_bootstrap_navwalker()
|
||||
'walker' => new WP_Bootstrap_Navwalker()
|
||||
)
|
||||
); ?>
|
||||
|
||||
|
|
|
@ -1,129 +1,146 @@
|
|||
<?php
|
||||
//Based on Jeff Hays code and his article here: http://robido.com/wordpress/wordpress-gallery-filter-to-modify-the-html-output-of-the-default-gallery-shortcode-and-style/
|
||||
// Custom filter function to modify default gallery shortcode output
|
||||
function bootstrap_wp_gallery( $output, $attr ) {
|
||||
/**
|
||||
* Based on Roots Sage Gallery: https://github.com/roots/sage/blob/5b9786b8ceecfe717db55666efe5bcf0c9e1801c/lib/gallery.php
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
// Remove built in shortcode.
|
||||
remove_shortcode( 'gallery', 'gallery_shortcode' );
|
||||
|
||||
// Initialize
|
||||
global $post, $wp_locale;
|
||||
/**
|
||||
* Replaces gallery with custom shortcode.
|
||||
*
|
||||
* @param mixed $attr Shortcode parameters.
|
||||
*
|
||||
* @return mixed|string|void
|
||||
*/
|
||||
function shortcode_gallery( $attr ) {
|
||||
$post = get_post();
|
||||
static $instance = 0;
|
||||
$instance ++;
|
||||
if ( ! empty( $attr['ids'] ) ) {
|
||||
if ( empty( $attr['orderby'] ) ) {
|
||||
$attr['orderby'] = 'post__in';
|
||||
}
|
||||
$attr['include'] = $attr['ids'];
|
||||
}
|
||||
$output = apply_filters( 'post_gallery', '', $attr );
|
||||
if ( $output != '' ) {
|
||||
return $output;
|
||||
}
|
||||
if ( isset( $attr['orderby'] ) ) {
|
||||
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
|
||||
if ( ! $attr['orderby'] ) {
|
||||
unset( $attr['orderby'] );
|
||||
}
|
||||
}
|
||||
extract( shortcode_atts( [
|
||||
'order' => 'ASC',
|
||||
'orderby' => 'menu_order ID',
|
||||
'id' => $post->ID,
|
||||
'itemtag' => '',
|
||||
'icontag' => '',
|
||||
'captiontag' => '',
|
||||
'columns' => 3,
|
||||
'size' => 'thumbnail',
|
||||
'include' => '',
|
||||
'exclude' => '',
|
||||
'link' => '',
|
||||
], $attr ) );
|
||||
$id = intval( $id );
|
||||
$columns = ( 12 % $columns == 0 ) ? $columns : 3;
|
||||
$grid = sprintf( 'col-sm-%1$s col-lg-%1$s', 12 / $columns );
|
||||
if ( $order === 'RAND' ) {
|
||||
$orderby = 'none';
|
||||
}
|
||||
if ( ! empty( $include ) ) {
|
||||
$_attachments = get_posts( [
|
||||
'include' => $include,
|
||||
'post_status' => 'inherit',
|
||||
'post_type' => 'attachment',
|
||||
'post_mime_type' => 'image',
|
||||
'order' => $order,
|
||||
'orderby' => $orderby
|
||||
] );
|
||||
$attachments = [];
|
||||
foreach ( $_attachments as $key => $val ) {
|
||||
$attachments[ $val->ID ] = $_attachments[ $key ];
|
||||
}
|
||||
} elseif ( ! empty( $exclude ) ) {
|
||||
$attachments = get_children( [
|
||||
'post_parent' => $id,
|
||||
'exclude' => $exclude,
|
||||
'post_status' => 'inherit',
|
||||
'post_type' => 'attachment',
|
||||
'post_mime_type' => 'image',
|
||||
'order' => $order,
|
||||
'orderby' => $orderby
|
||||
] );
|
||||
} else {
|
||||
$attachments = get_children( [
|
||||
'post_parent' => $id,
|
||||
'post_status' => 'inherit',
|
||||
'post_type' => 'attachment',
|
||||
'post_mime_type' => 'image',
|
||||
'order' => $order,
|
||||
'orderby' => $orderby
|
||||
] );
|
||||
}
|
||||
if ( empty( $attachments ) ) {
|
||||
return '';
|
||||
}
|
||||
if ( is_feed() ) {
|
||||
$output = "\n";
|
||||
foreach ( $attachments as $att_id => $attachment ) {
|
||||
$output .= wp_get_attachment_link( $att_id, $size, true ) . "\n";
|
||||
}
|
||||
|
||||
// Gallery instance counter
|
||||
static $instance = 0;
|
||||
$instance++;
|
||||
|
||||
// Validate the author's orderby attribute
|
||||
if ( isset( $attr['orderby'] ) ) {
|
||||
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
|
||||
if ( ! $attr['orderby'] ) unset( $attr['orderby'] );
|
||||
}
|
||||
|
||||
// Get attributes from shortcode
|
||||
extract( shortcode_atts( array(
|
||||
'order' => 'ASC',
|
||||
'orderby' => 'menu_order ID',
|
||||
'id' => $post->ID,
|
||||
'itemtag' => 'div',
|
||||
'icontag' => 'div',
|
||||
'captiontag' => 'div',
|
||||
'columns' => 3,
|
||||
'size' => 'thumbnail',
|
||||
'exclude' => ''
|
||||
), $attr ) );
|
||||
|
||||
// Initialize
|
||||
$id = intval( $id );
|
||||
$attachments = array();
|
||||
if ( $order == 'RAND' ) $orderby = 'none';
|
||||
|
||||
|
||||
if ( ! empty( $include ) ) {
|
||||
|
||||
// Include attribute is present
|
||||
$include = preg_replace( '/[^0-9,]+/', '', $include );
|
||||
$_attachments = get_posts( array( 'include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
|
||||
|
||||
// Setup attachments array
|
||||
foreach ( $_attachments as $key => $val ) {
|
||||
$attachments[ $val->ID ] = $_attachments[ $key ];
|
||||
}
|
||||
|
||||
} else if ( ! empty( $exclude ) ) {
|
||||
|
||||
// Exclude attribute is present
|
||||
$exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
|
||||
|
||||
// Setup attachments array
|
||||
$attachments = get_children( array( 'post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
|
||||
} else {
|
||||
// Setup attachments array
|
||||
$attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
|
||||
}
|
||||
|
||||
if ( empty( $attachments ) ) return '';
|
||||
|
||||
// Filter gallery differently for feeds
|
||||
if ( is_feed() ) {
|
||||
$output = "\n";
|
||||
foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link( $att_id, $size, true ) . "\n";
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Filter tags and attributes
|
||||
$itemtag = tag_escape( $itemtag );
|
||||
$captiontag = tag_escape( $captiontag );
|
||||
$columns = intval( $columns );
|
||||
$itemwidth = $columns > 0 ? floor( 12 / $columns ) : 100;
|
||||
$float = is_rtl() ? 'right' : 'left';
|
||||
$selector = "gallery-{$instance}";
|
||||
|
||||
// Filter gallery CSS
|
||||
$output = apply_filters( 'gallery_style', "
|
||||
|
||||
<div class='gallery galleryid-{$id} row' id='$selector'>"
|
||||
);
|
||||
|
||||
// Iterate through the attachments in this gallery instance
|
||||
$i = 0;
|
||||
foreach ( $attachments as $id => $attachment ) {
|
||||
|
||||
// Attachment link
|
||||
$link = isset( $attr['link'] ) && 'file' == $attr['link'] ? wp_get_attachment_link( $id, $size, false, false ) : wp_get_attachment_link( $id, $size, true, false );
|
||||
|
||||
// Start itemtag
|
||||
$output .= "<{$itemtag} class='gallery-item col-md-{$itemwidth}'>";
|
||||
|
||||
// icontag
|
||||
$output .= "
|
||||
<{$icontag} class='gallery-icon'>
|
||||
$link
|
||||
</{$icontag}>";
|
||||
|
||||
if ( $captiontag && trim( $attachment->post_excerpt ) ) {
|
||||
|
||||
// captiontag
|
||||
$output .= "
|
||||
<{$captiontag} class='gallery-caption'>
|
||||
" . wptexturize($attachment->post_excerpt) . "
|
||||
</{$captiontag}>";
|
||||
|
||||
}
|
||||
|
||||
// End itemtag
|
||||
$output .= "</{$itemtag}>";
|
||||
|
||||
// Line breaks by columns set
|
||||
if($columns > 0 && ++$i % $columns == 0) $output .= '<br style="clear: both">';
|
||||
|
||||
}
|
||||
|
||||
// End gallery output
|
||||
$output .= "
|
||||
<br style='clear: both;'>
|
||||
</div>\n";
|
||||
|
||||
return $output;
|
||||
return $output;
|
||||
}
|
||||
$unique = ( get_query_var( 'page' ) ) ? $instance . '-p' . get_query_var( 'page' ) : $instance;
|
||||
$output = '<div class="gallery gallery-' . $id . '-' . $unique . '">';
|
||||
$i = 0;
|
||||
foreach ( $attachments as $id => $attachment ) {
|
||||
switch ( $link ) {
|
||||
case 'file':
|
||||
$image = wp_get_attachment_link( $id, $size, false, false );
|
||||
break;
|
||||
case 'none':
|
||||
$image = wp_get_attachment_image( $id, $size, false, [ 'class' => 'thumbnail img-thumbnail' ] );
|
||||
break;
|
||||
default:
|
||||
$image = wp_get_attachment_link( $id, $size, true, false );
|
||||
break;
|
||||
}
|
||||
$output .= ( $i % $columns == 0 ) ? '<div class="row gallery-row">' : '';
|
||||
$output .= '<div class="' . $grid . '">' . $image;
|
||||
if ( trim( $attachment->post_excerpt ) ) {
|
||||
$output .= '<div class="caption hidden">' . wptexturize( $attachment->post_excerpt ) . '</div>';
|
||||
}
|
||||
$output .= '</div>';
|
||||
$i ++;
|
||||
$output .= ( $i % $columns == 0 ) ? '</div>' : '';
|
||||
}
|
||||
$output .= ( $i % $columns != 0 ) ? '</div>' : '';
|
||||
$output .= '</div>';
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Apply filter to default gallery shortcode
|
||||
add_filter( 'post_gallery', 'bootstrap_wp_gallery', 10, 2 );
|
||||
add_shortcode( 'gallery', 'shortcode_gallery' );
|
||||
|
||||
/**
|
||||
* Add class="thumbnail img-thumbnail" to attachment items
|
||||
*
|
||||
* @param string $html Markup.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function attachment_link_class( $html ) {
|
||||
$html = str_replace( '<a', '<a class="thumbnail img-thumbnail"', $html );
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
add_filter( 'wp_get_attachment_link', 'attachment_link_class', 10, 1 );
|
||||
|
|
|
@ -1,185 +1,212 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* Adapted from Edward McIntyre's wp_bootstrap_navwalker class.
|
||||
* Removed support for glyphicon and added support for Font Awesome
|
||||
*
|
||||
*/
|
||||
* Adapted from Edward McIntyre's wp_bootstrap_navwalker class.
|
||||
* Removed support for glyphicon and added support for Font Awesome.
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
// Exit if accessed directly.
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class Name: wp_bootstrap_navwalker
|
||||
* Class WP_Bootstrap_Navwalker
|
||||
* GitHub URI: https://github.com/twittem/wp-bootstrap-navwalker
|
||||
* Description: A custom WordPress nav walker class to implement the Bootstrap 3 navigation style in a custom theme using the WordPress built in menu manager.
|
||||
* Description: A custom WordPress nav walker class to implement the Bootstrap 4
|
||||
* navigation style in a custom theme using the WordPress built in menu manager.
|
||||
* Version: 2.0.4
|
||||
* Author: Edward McIntyre - @twittem
|
||||
* License: GPL-2.0+
|
||||
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||
* @package understrap
|
||||
*/
|
||||
//exit if accessed directly
|
||||
if(!defined('ABSPATH')) exit;
|
||||
class wp_bootstrap_navwalker extends Walker_Nav_Menu {
|
||||
/**
|
||||
* @see Walker::start_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
*/
|
||||
public function start_lvl( &$output, $depth = 0, $args = array() ) {
|
||||
$indent = str_repeat( "\t", $depth );
|
||||
$output .= "\n$indent<ul class=\" dropdown-menu\" role=\"menu\">\n";
|
||||
}
|
||||
/**
|
||||
* @see Walker::start_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Menu item data object.
|
||||
* @param int $depth Depth of menu item. Used for padding.
|
||||
* @param int $current_page Menu item ID.
|
||||
* @param object $args
|
||||
*/
|
||||
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
|
||||
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
|
||||
/**
|
||||
* Dividers, Headers or Disabled
|
||||
* =============================
|
||||
* Determine whether the item is a Divider, Header, Disabled or regular
|
||||
* menu item. To prevent errors we use the strcasecmp() function to so a
|
||||
* comparison that is not case sensitive. The strcasecmp() function returns
|
||||
* a 0 if the strings are equal.
|
||||
*/
|
||||
if ( strcasecmp( $item->attr_title, 'divider' ) == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="divider" role="presentation">';
|
||||
} else if ( strcasecmp( $item->title, 'divider') == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="divider" role="presentation">';
|
||||
} else if ( strcasecmp( $item->attr_title, 'dropdown-header') == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="dropdown-header" role="presentation">' . esc_attr( $item->title );
|
||||
} else if ( strcasecmp($item->attr_title, 'disabled' ) == 0 ) {
|
||||
$output .= $indent . '<li class="disabled" role="presentation"><a href="#">' . esc_attr( $item->title ) . '</a>';
|
||||
} else {
|
||||
$class_names = $value = '';
|
||||
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
|
||||
$classes[] = 'nav-item menu-item-' . $item->ID;
|
||||
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
|
||||
/*
|
||||
if ( $args->has_children )
|
||||
$class_names .= ' dropdown';
|
||||
*/
|
||||
if($args->has_children && $depth === 0) { $class_names .= ' dropdown'; } elseif($args->has_children && $depth > 0) { $class_names .= ' dropdown-submenu'; }
|
||||
if ( in_array( 'current-menu-item', $classes ) )
|
||||
$class_names .= ' active';
|
||||
// remove Font Awesome icon from classes array and save the icon
|
||||
// we will add the icon back in via a <span> below so it aligns with
|
||||
// the menu item
|
||||
if ( in_array('fa', $classes)) {
|
||||
$key = array_search('fa', $classes);
|
||||
$icon = $classes[$key + 1];
|
||||
$class_names = str_replace($classes[$key+1], '', $class_names);
|
||||
$class_names = str_replace($classes[$key], '', $class_names);
|
||||
}
|
||||
class WP_Bootstrap_Navwalker extends Walker_Nav_Menu {
|
||||
/**
|
||||
* The starting level of the menu.
|
||||
*
|
||||
* @see Walker::start_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
* @param mixed $args Rest of arguments.
|
||||
*/
|
||||
public function start_lvl( &$output, $depth = 0, $args = array() ) {
|
||||
$indent = str_repeat( "\t", $depth );
|
||||
$output .= "\n$indent<ul class=\" dropdown-menu\" role=\"menu\">\n";
|
||||
}
|
||||
|
||||
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
|
||||
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
|
||||
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
|
||||
$output .= $indent . '<li' . $id . $value . $class_names .'>';
|
||||
$atts = array();
|
||||
$atts['title'] = ! empty( $item->title ) ? $item->title : '';
|
||||
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
|
||||
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
|
||||
// If item has_children add atts to a.
|
||||
/**
|
||||
* Open element.
|
||||
*
|
||||
* @see Walker::start_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Menu item data object.
|
||||
* @param int $depth Depth of menu item. Used for padding.
|
||||
* @param mixed $args Rest arguments.
|
||||
* @param int $id Element's ID.
|
||||
*/
|
||||
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
|
||||
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
|
||||
/**
|
||||
* Dividers, Headers or Disabled
|
||||
* =============================
|
||||
* Determine whether the item is a Divider, Header, Disabled or regular
|
||||
* menu item. To prevent errors we use the strcasecmp() function to so a
|
||||
* comparison that is not case sensitive. The strcasecmp() function returns
|
||||
* a 0 if the strings are equal.
|
||||
*/
|
||||
if ( strcasecmp( $item->attr_title, 'divider' ) == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="divider" role="presentation">';
|
||||
} else if ( strcasecmp( $item->title, 'divider' ) == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="divider" role="presentation">';
|
||||
} else if ( strcasecmp( $item->attr_title, 'dropdown-header' ) == 0 && $depth === 1 ) {
|
||||
$output .= $indent . '<li class="dropdown-header" role="presentation">' . esc_attr( $item->title );
|
||||
} else if ( strcasecmp( $item->attr_title, 'disabled' ) == 0 ) {
|
||||
$output .= $indent . '<li class="disabled" role="presentation"><a href="#">' . esc_attr( $item->title ) . '</a>';
|
||||
} else {
|
||||
$class_names = $value = '';
|
||||
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
|
||||
$classes[] = 'nav-item menu-item-' . $item->ID;
|
||||
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
|
||||
/*
|
||||
if ( $args->has_children )
|
||||
$class_names .= ' dropdown';
|
||||
*/
|
||||
if ( $args->has_children && $depth === 0 ) {
|
||||
$class_names .= ' dropdown';
|
||||
} elseif ( $args->has_children && $depth > 0 ) {
|
||||
$class_names .= ' dropdown-submenu';
|
||||
}
|
||||
if ( in_array( 'current-menu-item', $classes ) ) {
|
||||
$class_names .= ' active';
|
||||
}
|
||||
// remove Font Awesome icon from classes array and save the icon
|
||||
// we will add the icon back in via a <span> below so it aligns with
|
||||
// the menu item
|
||||
if ( in_array( 'fa', $classes ) ) {
|
||||
$key = array_search( 'fa', $classes );
|
||||
$icon = $classes[ $key + 1 ];
|
||||
$class_names = str_replace( $classes[ $key + 1 ], '', $class_names );
|
||||
$class_names = str_replace( $classes[ $key ], '', $class_names );
|
||||
}
|
||||
|
||||
if ( $args->has_children && $depth === 0 ) {
|
||||
$atts['href'] = '#';
|
||||
$atts['data-toggle'] = 'dropdown';
|
||||
$atts['class'] = 'nav-link dropdown-toggle';
|
||||
} else {
|
||||
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
|
||||
$atts['class'] = 'nav-link';
|
||||
}
|
||||
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
|
||||
$attributes = '';
|
||||
foreach ( $atts as $attr => $value ) {
|
||||
if ( ! empty( $value ) ) {
|
||||
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
|
||||
$attributes .= ' ' . $attr . '="' . $value . '"';
|
||||
}
|
||||
}
|
||||
$item_output = $args->before;
|
||||
// Font Awesome icons
|
||||
if ( ! empty( $icon ) )
|
||||
$item_output .= '<a'. $attributes .'><span class="fa ' . esc_attr( $icon ) . '"></span> ';
|
||||
else
|
||||
$item_output .= '<a'. $attributes .'>';
|
||||
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
|
||||
$item_output .= ( $args->has_children && 0 === $depth ) ? ' <span class="caret"></span></a>' : '</a>';
|
||||
$item_output .= $args->after;
|
||||
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Traverse elements to create list from elements.
|
||||
*
|
||||
* Display one element if the element doesn't have any children otherwise,
|
||||
* display the element and its children. Will only traverse up to the max
|
||||
* depth and no ignore elements under that depth.
|
||||
*
|
||||
* This method shouldn't be called directly, use the walk() method instead.
|
||||
*
|
||||
* @see Walker::start_el()
|
||||
* @since 2.5.0
|
||||
*
|
||||
* @param object $element Data object
|
||||
* @param array $children_elements List of elements to continue traversing.
|
||||
* @param int $max_depth Max depth to traverse.
|
||||
* @param int $depth Depth of current element.
|
||||
* @param array $args
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @return null Null on failure with no changes to parameters.
|
||||
*/
|
||||
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
|
||||
if ( ! $element )
|
||||
return;
|
||||
$id_field = $this->db_fields['id'];
|
||||
// Display this element.
|
||||
if ( is_object( $args[0] ) )
|
||||
$args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] );
|
||||
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
|
||||
}
|
||||
/**
|
||||
* Menu Fallback
|
||||
* =============
|
||||
* If this function is assigned to the wp_nav_menu's fallback_cb variable
|
||||
* and a manu has not been assigned to the theme location in the WordPress
|
||||
* menu manager the function with display nothing to a non-logged in user,
|
||||
* and will add a link to the WordPress menu manager if logged in as an admin.
|
||||
*
|
||||
* @param array $args passed from the wp_nav_menu function.
|
||||
*
|
||||
*/
|
||||
public static function fallback( $args ) {
|
||||
if ( current_user_can( 'manage_options' ) ) {
|
||||
extract( $args );
|
||||
$fb_output = null;
|
||||
if ( $container ) {
|
||||
$fb_output = '<' . $container;
|
||||
if ( $container_class )
|
||||
$fb_output .= ' class="' . $container_class . '"';
|
||||
if ( $container_id )
|
||||
$fb_output .= ' id="' . $container_id . '"';
|
||||
$fb_output .= '>';
|
||||
}
|
||||
$fb_output .= '<ul';
|
||||
if ( $menu_class )
|
||||
$fb_output .= ' class="' . $menu_class . '"';
|
||||
if ( $menu_id )
|
||||
$fb_output .= ' id="' . $menu_id . '"';
|
||||
$fb_output .= '>';
|
||||
$fb_output .= '<li><a href="' . admin_url( 'nav-menus.php' ) . '">Add a menu</a></li>';
|
||||
$fb_output .= '</ul>';
|
||||
if ( $container )
|
||||
$fb_output .= '</' . $container . '>';
|
||||
echo $fb_output;
|
||||
}
|
||||
}
|
||||
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
|
||||
$id = apply_filters( 'nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args );
|
||||
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
|
||||
$output .= $indent . '<li' . $id . $value . $class_names . '>';
|
||||
$atts = array();
|
||||
$atts['title'] = ! empty( $item->title ) ? $item->title : '';
|
||||
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
|
||||
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
|
||||
// If item has_children add atts to a.
|
||||
|
||||
if ( $args->has_children && $depth === 0 ) {
|
||||
$atts['href'] = '#';
|
||||
$atts['data-toggle'] = 'dropdown';
|
||||
$atts['class'] = 'nav-link dropdown-toggle';
|
||||
} else {
|
||||
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
|
||||
$atts['class'] = 'nav-link';
|
||||
}
|
||||
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
|
||||
$attributes = '';
|
||||
foreach ( $atts as $attr => $value ) {
|
||||
if ( ! empty( $value ) ) {
|
||||
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
|
||||
$attributes .= ' ' . $attr . '="' . $value . '"';
|
||||
}
|
||||
}
|
||||
$item_output = $args->before;
|
||||
// Font Awesome icons
|
||||
if ( ! empty( $icon ) ) {
|
||||
$item_output .= '<a' . $attributes . '><span class="fa ' . esc_attr( $icon ) . '"></span> ';
|
||||
} else {
|
||||
$item_output .= '<a' . $attributes . '>';
|
||||
}
|
||||
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title,
|
||||
$item->ID ) . $args->link_after;
|
||||
$item_output .= ( $args->has_children && 0 === $depth ) ? ' <span class="caret"></span></a>' : '</a>';
|
||||
$item_output .= $args->after;
|
||||
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Traverse elements to create list from elements.
|
||||
*
|
||||
* Display one element if the element doesn't have any children otherwise,
|
||||
* display the element and its children. Will only traverse up to the max
|
||||
* depth and no ignore elements under that depth.
|
||||
*
|
||||
* This method shouldn't be called directly, use the walk() method instead.
|
||||
*
|
||||
* @see Walker::start_el()
|
||||
* @since 2.5.0
|
||||
*
|
||||
* @param object $element Data object
|
||||
* @param array $children_elements List of elements to continue traversing.
|
||||
* @param int $max_depth Max depth to traverse.
|
||||
* @param int $depth Depth of current element.
|
||||
* @param array $args
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
*
|
||||
* @return null Null on failure with no changes to parameters.
|
||||
*/
|
||||
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
|
||||
if ( ! $element ) {
|
||||
return;
|
||||
}
|
||||
$id_field = $this->db_fields['id'];
|
||||
// Display this element.
|
||||
if ( is_object( $args[0] ) ) {
|
||||
$args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] );
|
||||
}
|
||||
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
|
||||
}
|
||||
|
||||
/**
|
||||
* Menu Fallback
|
||||
* =============
|
||||
* If this function is assigned to the wp_nav_menu's fallback_cb variable
|
||||
* and a manu has not been assigned to the theme location in the WordPress
|
||||
* menu manager the function with display nothing to a non-logged in user,
|
||||
* and will add a link to the WordPress menu manager if logged in as an admin.
|
||||
*
|
||||
* @param array $args passed from the wp_nav_menu function.
|
||||
*
|
||||
*/
|
||||
public static function fallback( $args ) {
|
||||
if ( current_user_can( 'manage_options' ) ) {
|
||||
extract( $args );
|
||||
$fb_output = null;
|
||||
if ( $container ) {
|
||||
$fb_output = '<' . $container;
|
||||
if ( $container_class ) {
|
||||
$fb_output .= ' class="' . $container_class . '"';
|
||||
}
|
||||
if ( $container_id ) {
|
||||
$fb_output .= ' id="' . $container_id . '"';
|
||||
}
|
||||
$fb_output .= '>';
|
||||
}
|
||||
$fb_output .= '<ul';
|
||||
if ( $menu_class ) {
|
||||
$fb_output .= ' class="' . $menu_class . '"';
|
||||
}
|
||||
if ( $menu_id ) {
|
||||
$fb_output .= ' id="' . $menu_id . '"';
|
||||
}
|
||||
$fb_output .= '>';
|
||||
$fb_output .= '<li><a href="' . admin_url( 'nav-menus.php' ) . '">Add a menu</a></li>';
|
||||
$fb_output .= '</ul>';
|
||||
if ( $container ) {
|
||||
$fb_output .= '</' . $container . '>';
|
||||
}
|
||||
echo $fb_output;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,30 +1,54 @@
|
|||
<?php
|
||||
/************* COMMENT LAYOUT *********************/
|
||||
// Comment Form
|
||||
/**
|
||||
* Comment layout.
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
add_filter( 'comment_form_default_fields', 'bootstrap3_comment_form_fields' );
|
||||
function bootstrap3_comment_form_fields( $fields ) {
|
||||
$commenter = wp_get_current_commenter();
|
||||
$req = get_option( 'require_name_email' );
|
||||
$aria_req = ( $req ? " aria-required='true'" : '' );
|
||||
$html5 = current_theme_supports( 'html5', 'comment-form' ) ? 1 : 0;
|
||||
$fields = array(
|
||||
'author' => '<div class="form-group comment-form-author">' . '<label for="author">' . __( 'Name', 'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
|
||||
'<input class="form-control" id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . '></div>',
|
||||
'email' => '<div class="form-group comment-form-email"><label for="email">' . __( 'Email', 'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
|
||||
'<input class="form-control" id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . '></div>',
|
||||
'url' => '<div class="form-group comment-form-url"><label for="url">' . __( 'Website', 'understrap' ) . '</label> ' .
|
||||
'<input class="form-control" id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30"></div>',
|
||||
);
|
||||
return $fields;
|
||||
}
|
||||
// Comments form.
|
||||
add_filter( 'comment_form_default_fields', 'bootstrap3_comment_form_fields' );
|
||||
|
||||
add_filter( 'comment_form_defaults', 'bootstrap3_comment_form' );
|
||||
function bootstrap3_comment_form( $args ) {
|
||||
$args['comment_field'] = '<div class="form-group comment-form-comment">
|
||||
/**
|
||||
* Creates the comments form.
|
||||
*
|
||||
* @param string $fields Form fields.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function bootstrap3_comment_form_fields( $fields ) {
|
||||
$commenter = wp_get_current_commenter();
|
||||
$req = get_option( 'require_name_email' );
|
||||
$aria_req = ( $req ? " aria-required='true'" : '' );
|
||||
$html5 = current_theme_supports( 'html5', 'comment-form' ) ? 1 : 0;
|
||||
$fields = array(
|
||||
'author' => '<div class="form-group comment-form-author" <label for="author">' . __( 'Name',
|
||||
'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
|
||||
'<input class="form-control" id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . '></div>',
|
||||
'email' => '<div class="form-group comment-form-email"><label for="email">' . __( 'Email',
|
||||
'understrap' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
|
||||
'<input class="form-control" id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . '></div>',
|
||||
'url' => '<div class="form-group comment-form-url"><label for="url">' . __( 'Website',
|
||||
'understrap' ) . '</label> ' .
|
||||
'<input class="form-control" id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30"></div>',
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
add_filter( 'comment_form_defaults', 'bootstrap3_comment_form' );
|
||||
|
||||
/**
|
||||
* Builds the form.
|
||||
*
|
||||
* @param string $args Arguments for form's fields.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function bootstrap3_comment_form( $args ) {
|
||||
$args['comment_field'] = '<div class="form-group comment-form-comment">
|
||||
<label for="comment">' . _x( 'Comment', 'noun', 'understrap' ) . ( ' <span class="required">*</span>' ) . '</label>
|
||||
<textarea class="form-control" id="comment" name="comment" aria-required="true" cols="45" rows="8"></textarea>
|
||||
</div>';
|
||||
$args['class_submit'] = 'btn btn-secondary'; // since WP 4.1
|
||||
return $args;
|
||||
}
|
||||
$args['class_submit'] = 'btn btn-secondary'; // since WP 4.1.
|
||||
return $args;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* understrap Theme Customizer
|
||||
* Understrap Theme Customizer
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
@ -11,6 +11,11 @@
|
|||
* @param WP_Customize_Manager $wp_customize Theme Customizer object.
|
||||
*/
|
||||
if ( ! function_exists( 'understrap_customize_register' ) ) {
|
||||
/**
|
||||
* Register basic customizer support.
|
||||
*
|
||||
* @param object $wp_customize Customizer reference.
|
||||
*/
|
||||
function understrap_customize_register( $wp_customize ) {
|
||||
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
|
||||
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
|
||||
|
@ -21,39 +26,44 @@ if ( ! function_exists( 'understrap_customize_register' ) ) {
|
|||
add_action( 'customize_register', 'understrap_customize_register' );
|
||||
|
||||
if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
||||
/**
|
||||
* Register individual settings through customizer's API.
|
||||
*
|
||||
* @param WP_Customize_Manager $wp_customize Customizer reference.
|
||||
*/
|
||||
function understrap_theme_customize_register( $wp_customize ) {
|
||||
|
||||
$wp_customize->add_section( 'understrap_theme_slider_options', array(
|
||||
'title' => __( 'Slider Settings', 'understrap' )
|
||||
'title' => __( 'Slider Settings', 'understrap' ),
|
||||
) );
|
||||
|
||||
$wp_customize->add_setting( 'understrap_theme_slider_count_setting', array(
|
||||
'default' => '1',
|
||||
'sanitize_callback' => 'absint'
|
||||
'sanitize_callback' => 'absint',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control( 'understrap_theme_slider_count', array(
|
||||
'label' => __( 'Number of slides displaying at once', 'understrap' ),
|
||||
'section' => 'understrap_theme_slider_options',
|
||||
'type' => 'text',
|
||||
'settings' => 'understrap_theme_slider_count_setting'
|
||||
'settings' => 'understrap_theme_slider_count_setting',
|
||||
) );
|
||||
|
||||
$wp_customize->add_setting( 'understrap_theme_slider_time_setting', array(
|
||||
'default' => '5000',
|
||||
'sanitize_callback' => 'absint'
|
||||
'sanitize_callback' => 'absint',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control( 'understrap_theme_slider_time', array(
|
||||
'label' => __( 'Slider Time (in ms)', 'understrap' ),
|
||||
'section' => 'understrap_theme_slider_options',
|
||||
'type' => 'text',
|
||||
'settings' => 'understrap_theme_slider_time_setting'
|
||||
'settings' => 'understrap_theme_slider_time_setting',
|
||||
) );
|
||||
|
||||
$wp_customize->add_setting( 'understrap_theme_slider_loop_setting', array(
|
||||
'default' => 'true',
|
||||
'sanitize_callback' => 'esc_textarea'
|
||||
'sanitize_callback' => 'esc_textarea',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control( 'understrap_theme_loop', array(
|
||||
|
@ -64,10 +74,10 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
'true' => 'yes',
|
||||
'false' => 'no',
|
||||
),
|
||||
'settings' => 'understrap_theme_slider_loop_setting'
|
||||
'settings' => 'understrap_theme_slider_loop_setting',
|
||||
) );
|
||||
|
||||
// Theme layout settings
|
||||
// Theme layout settings.
|
||||
$wp_customize->add_section( 'understrap_theme_layout_options', array(
|
||||
'title' => __( 'Theme Layout Settings', 'understrap' ),
|
||||
'capability' => 'edit_theme_options',
|
||||
|
@ -76,10 +86,10 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
) );
|
||||
|
||||
$wp_customize->add_setting( 'understrap_container_type', array(
|
||||
'default' => 'container',
|
||||
'type' => 'theme_mod',
|
||||
'default' => 'container',
|
||||
'type' => 'theme_mod',
|
||||
'sanitize_callback' => 'esc_textarea',
|
||||
'capability' => 'edit_theme_options'
|
||||
'capability' => 'edit_theme_options',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control(
|
||||
|
@ -100,10 +110,10 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
) );
|
||||
|
||||
$wp_customize->add_setting( 'understrap_sidebar_position', array(
|
||||
'default' => 'right',
|
||||
'type' => 'theme_mod',
|
||||
'default' => 'right',
|
||||
'type' => 'theme_mod',
|
||||
'sanitize_callback' => 'esc_textarea',
|
||||
'capability' => 'edit_theme_options',
|
||||
'capability' => 'edit_theme_options',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control(
|
||||
|
@ -111,7 +121,8 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
$wp_customize,
|
||||
'understrap_sidebar_position', array(
|
||||
'label' => __( 'Sidebar Positioning', 'understrap' ),
|
||||
'description' => __( "Set sidebar's position. Can either be: right, left, both or none", 'understrap' ),
|
||||
'description' => __( "Set sidebar's position. Can either be: right, left, both or none",
|
||||
'understrap' ),
|
||||
'section' => 'understrap_theme_layout_options',
|
||||
'settings' => 'understrap_sidebar_position',
|
||||
'type' => 'select',
|
||||
|
@ -125,12 +136,12 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
)
|
||||
) );
|
||||
|
||||
// How to display posts index page (home.php)
|
||||
// How to display posts index page (home.php).
|
||||
$wp_customize->add_setting( 'understrap_posts_index_style', array(
|
||||
'default' => 'default',
|
||||
'type' => 'theme_mod',
|
||||
'default' => 'default',
|
||||
'type' => 'theme_mod',
|
||||
'sanitize_callback' => 'esc_textarea',
|
||||
'capability' => 'edit_theme_options',
|
||||
'capability' => 'edit_theme_options',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control(
|
||||
|
@ -138,14 +149,14 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
$wp_customize,
|
||||
'understrap_posts_index_style', array(
|
||||
'label' => __( 'Posts Index Style', 'understrap' ),
|
||||
'description' => __( "Choose how to display latest posts", 'understrap' ),
|
||||
'description' => __( 'Choose how to display latest posts', 'understrap' ),
|
||||
'section' => 'understrap_theme_layout_options',
|
||||
'settings' => 'understrap_posts_index_style',
|
||||
'type' => 'select',
|
||||
'choices' => array(
|
||||
'default' => __( 'Default', 'understrap' ),
|
||||
'default' => __( 'Default', 'understrap' ),
|
||||
'masonry' => __( 'Masonry', 'understrap' ),
|
||||
'grid' => __( 'Grid', 'understrap' ),
|
||||
'grid' => __( 'Grid', 'understrap' ),
|
||||
),
|
||||
'priority' => '30',
|
||||
)
|
||||
|
@ -154,48 +165,48 @@ if ( ! function_exists( 'understrap_theme_customize_register' ) ) {
|
|||
// Columns setup for grid posts.
|
||||
/**
|
||||
* Function and callback to check when grid is enabled.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function is_grid_enabled ()
|
||||
{
|
||||
function is_grid_enabled() {
|
||||
return 'grid' == get_theme_mod( 'understrap_posts_index_style' );
|
||||
}
|
||||
if ( is_grid_enabled() ) {
|
||||
// How many columns to use each grid post
|
||||
$wp_customize->add_setting( 'understrap_grid_post_columns', array(
|
||||
'default' => '6',
|
||||
'type' => 'theme_mod',
|
||||
'capability' => 'edit_theme_options',
|
||||
'transport' => 'refresh',
|
||||
|
||||
// How many columns to use each grid post.
|
||||
$wp_customize->add_setting( 'understrap_grid_post_columns', array(
|
||||
'default' => '6',
|
||||
'type' => 'theme_mod',
|
||||
'capability' => 'edit_theme_options',
|
||||
'transport' => 'refresh',
|
||||
) );
|
||||
|
||||
$wp_customize->add_control(
|
||||
new WP_Customize_Control(
|
||||
$wp_customize,
|
||||
'understrap_grid_post_columns', array(
|
||||
'label' => __( 'Grid Post Columns', 'understrap' ),
|
||||
'description' => __( 'Choose how many columns to use in grid posts', 'understrap' ),
|
||||
'section' => 'understrap_theme_layout_options',
|
||||
'settings' => 'understrap_grid_post_columns',
|
||||
'type' => 'select',
|
||||
'choices' => array(
|
||||
'6' => '6',
|
||||
'4' => '4',
|
||||
'3' => '3',
|
||||
'2' => '2',
|
||||
'1' => '1',
|
||||
),
|
||||
'default' => 6,
|
||||
'priority' => '30',
|
||||
'transport' => 'refresh',
|
||||
)
|
||||
) );
|
||||
|
||||
$wp_customize->add_control(
|
||||
new WP_Customize_Control(
|
||||
$wp_customize,
|
||||
'understrap_grid_post_columns', array(
|
||||
'label' => __( 'Grid Post Columns', 'understrap' ),
|
||||
'description' => __( "Choose how many columns to use in grid posts", 'understrap' ),
|
||||
'section' => 'understrap_theme_layout_options',
|
||||
'settings' => 'understrap_grid_post_columns',
|
||||
'type' => 'select',
|
||||
'choices' => array(
|
||||
'6' => '6',
|
||||
'4' => '4',
|
||||
'3' => '3',
|
||||
'2' => '2',
|
||||
'1' => '1',
|
||||
),
|
||||
'default' => 6,
|
||||
'priority' => '30',
|
||||
'transport' => 'refresh',
|
||||
)
|
||||
) );
|
||||
|
||||
}
|
||||
// hook to auto-hide/show depending the understrap_posts_index_style option
|
||||
// hook to auto-hide/show depending the understrap_posts_index_style option.
|
||||
$wp_customize->get_control( 'understrap_grid_post_columns' )->active_callback = 'is_grid_enabled';
|
||||
|
||||
}
|
||||
}
|
||||
} // endif function_exists( 'understrap_theme_customize_register' ).
|
||||
add_action( 'customize_register', 'understrap_theme_customize_register' );
|
||||
|
||||
|
||||
|
@ -203,8 +214,12 @@ add_action( 'customize_register', 'understrap_theme_customize_register' );
|
|||
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
|
||||
*/
|
||||
if ( ! function_exists( 'understrap_customize_preview_js' ) ) {
|
||||
/**
|
||||
* Setup JS integration for live previewing.
|
||||
*/
|
||||
function understrap_customize_preview_js() {
|
||||
wp_enqueue_script( 'understrap_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20130508', true );
|
||||
wp_enqueue_script( 'understrap_customizer', get_template_directory_uri() . '/js/customizer.js',
|
||||
array( 'customize-preview' ), '20130508', true );
|
||||
}
|
||||
}
|
||||
add_action( 'customize_preview_init', 'understrap_customize_preview_js' );
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
<?php
|
||||
/**
|
||||
* understrap enqueue scripts
|
||||
* Understrap enqueue scripts
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
if ( ! function_exists ( 'understrap_scripts' ) ) {
|
||||
if ( ! function_exists( 'understrap_scripts' ) ) {
|
||||
/**
|
||||
* Load theme's JavaScript sources.
|
||||
*/
|
||||
function understrap_scripts() {
|
||||
wp_enqueue_style( 'understrap-styles', get_stylesheet_directory_uri() . '/css/theme.min.css', array(), '0.4.9' );
|
||||
wp_enqueue_style( 'understrap-styles', get_stylesheet_directory_uri() . '/css/theme.min.css', array(),
|
||||
'0.4.9' );
|
||||
wp_enqueue_script( 'jquery' );
|
||||
wp_enqueue_script( 'understrap-scripts', get_template_directory_uri() . '/js/theme.min.js', array(), '0.4.9', true );
|
||||
wp_enqueue_script( 'understrap-scripts', get_template_directory_uri() . '/js/theme.min.js', array(), '0.4.9',
|
||||
true );
|
||||
|
||||
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
|
||||
wp_enqueue_script( 'comment-reply' );
|
||||
|
@ -17,48 +22,53 @@ if ( ! function_exists ( 'understrap_scripts' ) ) {
|
|||
|
||||
// menu - vertical page association
|
||||
// do not load on WooCommerce pages
|
||||
// do not load if we are in WooCommerce pages
|
||||
// do not load if we are in WooCommerce pages.
|
||||
$loadit = true;
|
||||
if ( class_exists( 'WooCommerce' ) ) {
|
||||
if (is_woocommerce()) {
|
||||
if ( is_woocommerce() ) {
|
||||
$loadit = false;
|
||||
}
|
||||
}
|
||||
if ( is_page_template( ('page-templates/vertical-one-page.php' ) || is_home() || is_single()) && $loadit ) {
|
||||
wp_enqueue_script( 'vertical-one-page', get_template_directory_uri() . '/js/vertical-one-page.js', array( 'jquery' ), '0.4.9', true );
|
||||
if ( is_page_template( ( 'page-templates/vertical-one-page.php' ) || is_home() || is_single() ) && $loadit ) {
|
||||
wp_enqueue_script( 'vertical-one-page', get_template_directory_uri() . '/js/vertical-one-page.js',
|
||||
array( 'jquery' ), '0.4.9', true );
|
||||
$page_for_posts = strtolower( get_the_title( get_option( 'page_for_posts' ) ) );
|
||||
$home_url = home_url();
|
||||
$is_single = is_single();
|
||||
$vars = array(
|
||||
'pageForPosts' => $page_for_posts,
|
||||
'homeUrl' => $home_url,
|
||||
'isSingle' => $is_single
|
||||
'isSingle' => $is_single,
|
||||
);
|
||||
wp_localize_script( 'vertical-one-page', 'vars', $vars );
|
||||
}
|
||||
// menu - vertical page association end
|
||||
// menu - vertical page association end.
|
||||
}
|
||||
}
|
||||
} // endif function_exists( 'understrap_scripts' ).
|
||||
|
||||
add_action( 'wp_enqueue_scripts', 'understrap_scripts' );
|
||||
|
||||
/**
|
||||
*Loading slider script conditionally
|
||||
**/
|
||||
*/
|
||||
|
||||
if ( is_active_sidebar( 'hero' ) ):
|
||||
add_action( "wp_enqueue_scripts", "understrap_slider" );
|
||||
if ( is_active_sidebar( 'hero' ) ) :
|
||||
add_action( 'wp_enqueue_scripts', 'understrap_slider' );
|
||||
|
||||
if ( ! function_exists ( 'understrap_slider' ) ) {
|
||||
if ( ! function_exists( 'understrap_slider' ) ) {
|
||||
/**
|
||||
* Setup slider.
|
||||
*/
|
||||
function understrap_slider() {
|
||||
if ( is_front_page() ) {
|
||||
$data = array(
|
||||
"timeout" => intval( get_theme_mod( 'understrap_theme_slider_time_setting', 5000 ) ),
|
||||
"items" => intval( get_theme_mod( 'understrap_theme_slider_count_setting', 1 ) )
|
||||
'timeout' => intval( get_theme_mod( 'understrap_theme_slider_time_setting', 5000 ) ),
|
||||
'items' => intval( get_theme_mod( 'understrap_theme_slider_count_setting', 1 ) ),
|
||||
);
|
||||
|
||||
wp_enqueue_script( "understrap-slider-script", get_stylesheet_directory_uri() . '/js/slider_settings.js', array(), '0.4.9' );
|
||||
wp_localize_script( "understrap-slider-script", "understrap_slider_variables", $data );
|
||||
wp_enqueue_script( 'understrap-slider-script',
|
||||
get_stylesheet_directory_uri() . '/js/slider_settings.js', array(), '0.4.9' );
|
||||
wp_localize_script( 'understrap-slider-script', 'understrap_slider_variables', $data );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,14 +6,15 @@
|
|||
*
|
||||
* @package understrap
|
||||
*/
|
||||
/**
|
||||
* Adds custom classes to the array of body classes.
|
||||
*
|
||||
* @param array $classes Classes for the body element.
|
||||
* @return array
|
||||
*/
|
||||
|
||||
if ( ! function_exists ( 'understrap_body_classes' ) ) {
|
||||
if ( ! function_exists( 'understrap_body_classes' ) ) {
|
||||
/**
|
||||
* Adds custom classes to the array of body classes.
|
||||
*
|
||||
* @param array $classes Classes for the body element.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function understrap_body_classes( $classes ) {
|
||||
// Adds a class of group-blog to blogs with more than 1 published author.
|
||||
if ( is_multi_author() ) {
|
||||
|
@ -23,35 +24,51 @@ if ( ! function_exists ( 'understrap_body_classes' ) ) {
|
|||
if ( ! is_singular() ) {
|
||||
$classes[] = 'hfeed';
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
}
|
||||
add_filter( 'body_class', 'understrap_body_classes' );
|
||||
|
||||
// Removes tag class from the body_class array to avoid Bootstrap markup styling issues.
|
||||
|
||||
add_filter( 'body_class', 'adjust_body_class' );
|
||||
|
||||
if ( ! function_exists ( 'adjust_body_class' ) ) {
|
||||
if ( ! function_exists( 'adjust_body_class' ) ) {
|
||||
/**
|
||||
* Setup body classes.
|
||||
*
|
||||
* @param string $classes CSS classes.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function adjust_body_class( $classes ) {
|
||||
|
||||
foreach ( $classes as $key => $value ) {
|
||||
if ( $value == 'tag' ) unset( $classes[ $key ] );
|
||||
}
|
||||
foreach ( $classes as $key => $value ) {
|
||||
if ( $value == 'tag' ) {
|
||||
unset( $classes[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
return $classes;
|
||||
return $classes;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Filter custom logo with correct classes
|
||||
add_filter('get_custom_logo','change_logo_class');
|
||||
// Filter custom logo with correct classes.
|
||||
add_filter( 'get_custom_logo', 'change_logo_class' );
|
||||
|
||||
if ( ! function_exists( 'change_logo_class' ) ) {
|
||||
/**
|
||||
* Replaces logo CSS class.
|
||||
*
|
||||
* @param string $html Markup.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function change_logo_class( $html ) {
|
||||
$html = str_replace( 'class="custom-logo"', 'class="img-responsive"', $html );
|
||||
$html = str_replace( 'class="custom-logo-link"', 'class="navbar-brand custom-logo-link"', $html );
|
||||
|
||||
if ( ! function_exists ( 'change_logo_class' ) ) {
|
||||
function change_logo_class($html)
|
||||
{
|
||||
$html = str_replace('class="custom-logo"', 'class="img-responsive"', $html);
|
||||
$html = str_replace('class="custom-logo-link"', 'class="navbar-brand custom-logo-link"', $html);
|
||||
return $html;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
*
|
||||
* @package understrap
|
||||
*/
|
||||
/**
|
||||
* Jetpack setup function.
|
||||
*
|
||||
* See: https://jetpack.com/support/infinite-scroll/
|
||||
* See: https://jetpack.com/support/responsive-videos/
|
||||
*/
|
||||
if ( ! function_exists ( 'understrap_jetpack_setup' ) ) {
|
||||
|
||||
if ( ! function_exists( 'understrap_jetpack_setup' ) ) {
|
||||
/**
|
||||
* Jetpack setup function.
|
||||
*
|
||||
* See: https://jetpack.com/support/infinite-scroll/
|
||||
* See: https://jetpack.com/support/responsive-videos/
|
||||
*/
|
||||
function understrap_jetpack_setup() {
|
||||
// Add theme support for Infinite Scroll.
|
||||
add_theme_support( 'infinite-scroll', array(
|
||||
|
@ -25,17 +26,17 @@ if ( ! function_exists ( 'understrap_jetpack_setup' ) ) {
|
|||
}
|
||||
}
|
||||
add_action( 'after_setup_theme', 'understrap_jetpack_setup' );
|
||||
/**
|
||||
* Custom render function for Infinite Scroll.
|
||||
*/
|
||||
if ( ! function_exists ( 'understrap_infinite_scroll_render' ) ) {
|
||||
if ( ! function_exists( 'understrap_infinite_scroll_render' ) ) {
|
||||
/**
|
||||
* Custom render function for Infinite Scroll.
|
||||
*/
|
||||
function understrap_infinite_scroll_render() {
|
||||
while ( have_posts() ) {
|
||||
the_post();
|
||||
if ( is_search() ) :
|
||||
get_template_part( 'loop-templates/content', 'search' );
|
||||
get_template_part( 'loop-templates/content', 'search' );
|
||||
else :
|
||||
get_template_part( 'loop-templates/content', get_post_format() );
|
||||
get_template_part( 'loop-templates/content', get_post_format() );
|
||||
endif;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +1,41 @@
|
|||
<?php
|
||||
/* Inspired by Simon Bradburys cleanup.php fromb4st theme https://github.com/SimonPadbury/b4st */
|
||||
/*
|
||||
Removes the generator tag with WP version numbers. Hackers will use this to find weak and old WP installs
|
||||
*/
|
||||
function no_generator() {
|
||||
return '';
|
||||
/**
|
||||
* Inspired by Simon Bradburys cleanup.php fromb4st theme https://github.com/SimonPadbury/b4st
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
/**
|
||||
* Removes the generator tag with WP version numbers. Hackers will use this to find weak and old WP installs
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function no_generator() {
|
||||
return '';
|
||||
}
|
||||
|
||||
add_filter( 'the_generator', 'no_generator' );
|
||||
|
||||
/*
|
||||
Clean up wp_head() from unused or unsecure stuff
|
||||
*/
|
||||
remove_action('wp_head', 'wp_generator');
|
||||
remove_action('wp_head', 'rsd_link');
|
||||
remove_action('wp_head', 'wlwmanifest_link');
|
||||
remove_action('wp_head', 'index_rel_link');
|
||||
remove_action('wp_head', 'feed_links', 2);
|
||||
remove_action('wp_head', 'feed_links_extra', 3);
|
||||
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
|
||||
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
|
||||
/*
|
||||
Show less info to users on failed login for security.
|
||||
(Will not let a valid username be known.)
|
||||
*/
|
||||
function show_less_login_info() {
|
||||
return "<strong>ERROR</strong>: Stop guessing!";
|
||||
remove_action( 'wp_head', 'wp_generator' );
|
||||
remove_action( 'wp_head', 'rsd_link' );
|
||||
remove_action( 'wp_head', 'wlwmanifest_link' );
|
||||
remove_action( 'wp_head', 'index_rel_link' );
|
||||
remove_action( 'wp_head', 'feed_links', 2 );
|
||||
remove_action( 'wp_head', 'feed_links_extra', 3 );
|
||||
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
|
||||
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
|
||||
|
||||
/**
|
||||
* Show less info to users on failed login for security.
|
||||
* (Will not let a valid username be known.)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function show_less_login_info() {
|
||||
return '<strong>ERROR</strong>: Stop guessing!';
|
||||
}
|
||||
|
||||
add_filter( 'login_errors', 'show_less_login_info' );
|
||||
|
|
179
inc/setup.php
179
inc/setup.php
|
@ -1,112 +1,127 @@
|
|||
<?php
|
||||
/**
|
||||
* Set the content width based on the theme's design and stylesheet.
|
||||
* Theme basic setup.
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
require get_template_directory() . '/inc/theme-settings.php';
|
||||
|
||||
// Set the content width based on the theme's design and stylesheet.
|
||||
if ( ! isset( $content_width ) ) {
|
||||
$content_width = 640; /* pixels */
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'understrap_setup' ) ) :
|
||||
/**
|
||||
* 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 understrap_setup() {
|
||||
|
||||
/*
|
||||
* Make theme available for translation.
|
||||
* Translations can be filed in the /languages/ directory.
|
||||
* If you're building a theme based on understrap, use a find and replace
|
||||
* to change 'understrap' to the name of your theme in all the template files
|
||||
*/
|
||||
load_theme_textdomain( 'understrap', get_template_directory() . '/languages' );
|
||||
|
||||
// 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.
|
||||
/**
|
||||
* Sets up theme defaults and registers support for various WordPress features.
|
||||
*
|
||||
* @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails
|
||||
* 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.
|
||||
*/
|
||||
//add_theme_support( 'post-thumbnails' );
|
||||
function understrap_setup() {
|
||||
/*
|
||||
* Make theme available for translation.
|
||||
* Translations can be filed in the /languages/ directory.
|
||||
* If you're building a theme based on understrap, use a find and replace
|
||||
* to change 'understrap' to the name of your theme in all the template files
|
||||
*/
|
||||
load_theme_textdomain( 'understrap', get_template_directory() . '/languages' );
|
||||
|
||||
// This theme uses wp_nav_menu() in one location.
|
||||
register_nav_menus( array(
|
||||
'primary' => __( 'Primary Menu', 'understrap' ),
|
||||
) );
|
||||
// Add default posts and comments RSS feed links to head.
|
||||
add_theme_support( 'automatic-feed-links' );
|
||||
|
||||
/*
|
||||
* 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',
|
||||
) );
|
||||
|
||||
/*
|
||||
* Adding Thumbnail basic support
|
||||
*/
|
||||
add_theme_support( "post-thumbnails" );
|
||||
/*
|
||||
* 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 Formats.
|
||||
* See http://codex.wordpress.org/Post_Formats
|
||||
*/
|
||||
add_theme_support( 'post-formats', array(
|
||||
'aside', 'image', 'video', 'quote', 'link',
|
||||
) );
|
||||
/*
|
||||
* Enable support for Post Thumbnails on posts and pages.
|
||||
*
|
||||
* @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails
|
||||
*/
|
||||
//add_theme_support( 'post-thumbnails' );
|
||||
|
||||
// Set up the WordPress core custom background feature.
|
||||
add_theme_support( 'custom-background', apply_filters( 'understrap_custom_background_args', array(
|
||||
'default-color' => 'ffffff',
|
||||
'default-image' => '',
|
||||
) ) );
|
||||
|
||||
// Set up the Wordpress Theme logo feature.
|
||||
add_theme_support('custom-logo');
|
||||
// This theme uses wp_nav_menu() in one location.
|
||||
register_nav_menus( array(
|
||||
'primary' => __( 'Primary Menu', 'understrap' ),
|
||||
) );
|
||||
|
||||
// Check and setup theme default settings.
|
||||
setup_theme_default_settings();
|
||||
}
|
||||
endif; // understrap_setup
|
||||
/*
|
||||
* 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',
|
||||
) );
|
||||
|
||||
/*
|
||||
* Adding Thumbnail basic support
|
||||
*/
|
||||
add_theme_support( 'post-thumbnails' );
|
||||
|
||||
/*
|
||||
* Enable support for Post Formats.
|
||||
* See http://codex.wordpress.org/Post_Formats
|
||||
*/
|
||||
add_theme_support( 'post-formats', array(
|
||||
'aside',
|
||||
'image',
|
||||
'video',
|
||||
'quote',
|
||||
'link',
|
||||
) );
|
||||
|
||||
// Set up the WordPress core custom background feature.
|
||||
add_theme_support( 'custom-background', apply_filters( 'understrap_custom_background_args', array(
|
||||
'default-color' => 'ffffff',
|
||||
'default-image' => '',
|
||||
) ) );
|
||||
|
||||
// Set up the Wordpress Theme logo feature.
|
||||
add_theme_support( 'custom-logo' );
|
||||
|
||||
// Check and setup theme default settings.
|
||||
setup_theme_default_settings();
|
||||
}
|
||||
endif; // understrap_setup.
|
||||
add_action( 'after_setup_theme', 'understrap_setup' );
|
||||
|
||||
/**
|
||||
* Adding the Read more link to excerpts
|
||||
*/
|
||||
/*function new_excerpt_more( $more ) {
|
||||
return ' <p><a class="read-more btn btn-default" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'understrap') . '</a></p>';
|
||||
}
|
||||
add_filter( 'excerpt_more', 'new_excerpt_more' );*/
|
||||
/* Removes the ... from the excerpt read more link */
|
||||
if ( ! function_exists ( 'custom_excerpt_more' ) ) {
|
||||
if ( ! function_exists( 'custom_excerpt_more' ) ) {
|
||||
/**
|
||||
* Removes the ... from the excerpt read more link
|
||||
*
|
||||
* @param string $more The excerpt.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function custom_excerpt_more( $more ) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
add_filter( 'excerpt_more', 'custom_excerpt_more' );
|
||||
|
||||
/* Adds a custom read more link to all excerpts, manually or automatically generated */
|
||||
if ( ! function_exists ( 'all_excerpts_get_more_link' ) ) {
|
||||
function all_excerpts_get_more_link($post_excerpt) {
|
||||
if ( ! function_exists( 'all_excerpts_get_more_link' ) ) {
|
||||
/**
|
||||
* Adds a custom read more link to all excerpts, manually or automatically generated
|
||||
*
|
||||
* @param string $post_excerpt Posts's excerpt.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function all_excerpts_get_more_link( $post_excerpt ) {
|
||||
|
||||
return $post_excerpt . ' [...]<p><a class="btn btn-secondary understrap-read-more-link" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More...', 'understrap') . '</a></p>';
|
||||
return $post_excerpt . ' [...]<p><a class="btn btn-secondary understrap-read-more-link" href="' . get_permalink( get_the_ID() ) . '">' . __( 'Read More...',
|
||||
'understrap' ) . '</a></p>';
|
||||
}
|
||||
}
|
||||
add_filter('wp_trim_excerpt', 'all_excerpts_get_more_link');
|
||||
add_filter( 'wp_trim_excerpt', 'all_excerpts_get_more_link' );
|
||||
|
|
|
@ -7,75 +7,77 @@
|
|||
* @package understrap
|
||||
*/
|
||||
|
||||
|
||||
if ( ! function_exists( 'understrap_posted_on' ) ) :
|
||||
/**
|
||||
* Prints HTML with meta information for the current post-date/time and author.
|
||||
*/
|
||||
function understrap_posted_on() {
|
||||
$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">' . __( ' Edited %4$s', 'understrap' ) . '</time>';
|
||||
/**
|
||||
* Prints HTML with meta information for the current post-date/time and author.
|
||||
*/
|
||||
function understrap_posted_on() {
|
||||
$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">' . __( ' Edited %4$s',
|
||||
'understrap' ) . '</time>';
|
||||
}
|
||||
|
||||
$time_string = sprintf( $time_string,
|
||||
esc_attr( get_the_date( 'c' ) ),
|
||||
esc_html( get_the_date() ),
|
||||
esc_attr( get_the_modified_date( 'c' ) ),
|
||||
esc_html( get_the_modified_date() )
|
||||
);
|
||||
|
||||
$posted_on = sprintf(
|
||||
esc_html_x( 'Posted on %s', 'post date', 'understrap' ),
|
||||
'<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . $time_string . '</a>'
|
||||
);
|
||||
|
||||
$byline = sprintf(
|
||||
esc_html_x( 'by %s', 'post author', 'understrap' ),
|
||||
'<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . esc_html( get_the_author() ) . '</a></span>'
|
||||
);
|
||||
|
||||
echo '<span class="posted-on">' . $posted_on . '</span><span class="byline"> ' . $byline . '</span>';
|
||||
|
||||
}
|
||||
|
||||
$time_string = sprintf( $time_string,
|
||||
esc_attr( get_the_date( 'c' ) ),
|
||||
esc_html( get_the_date() ),
|
||||
esc_attr( get_the_modified_date( 'c' ) ),
|
||||
esc_html( get_the_modified_date() )
|
||||
);
|
||||
|
||||
$posted_on = sprintf(
|
||||
esc_html_x( 'Posted on %s', 'post date', 'understrap' ),
|
||||
'<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . $time_string . '</a>'
|
||||
);
|
||||
|
||||
$byline = sprintf(
|
||||
esc_html_x( 'by %s', 'post author', 'understrap' ),
|
||||
'<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . esc_html( get_the_author() ) . '</a></span>'
|
||||
);
|
||||
|
||||
echo '<span class="posted-on">' . $posted_on . '</span><span class="byline"> ' . $byline . '</span>';
|
||||
|
||||
}
|
||||
endif;
|
||||
|
||||
if ( ! function_exists( 'understrap_entry_footer' ) ) :
|
||||
/**
|
||||
* Prints HTML with meta information for the categories, tags and comments.
|
||||
*/
|
||||
function understrap_entry_footer() {
|
||||
// Hide category and tag text for pages.
|
||||
if ( 'post' == get_post_type() ) {
|
||||
/* translators: used between list items, there is a space after the comma */
|
||||
$categories_list = get_the_category_list( __( ', ', 'understrap' ) );
|
||||
if ( $categories_list && understrap_categorized_blog() ) {
|
||||
printf( '<span class="cat-links">' . __( 'Posted in %1$s', 'understrap' ) . '</span>', $categories_list );
|
||||
/**
|
||||
* Prints HTML with meta information for the categories, tags and comments.
|
||||
*/
|
||||
function understrap_entry_footer() {
|
||||
// Hide category and tag text for pages.
|
||||
if ( 'post' == get_post_type() ) {
|
||||
/* translators: used between list items, there is a space after the comma */
|
||||
$categories_list = get_the_category_list( __( ', ', 'understrap' ) );
|
||||
if ( $categories_list && understrap_categorized_blog() ) {
|
||||
printf( '<span class="cat-links">' . __( 'Posted in %1$s', 'understrap' ) . '</span>',
|
||||
$categories_list );
|
||||
}
|
||||
|
||||
/* translators: used between list items, there is a space after the comma */
|
||||
$tags_list = get_the_tag_list( '', __( ', ', 'understrap' ) );
|
||||
if ( $tags_list ) {
|
||||
printf( '<span class="tags-links">' . __( 'Tagged %1$s', 'understrap' ) . '</span>', $tags_list );
|
||||
}
|
||||
}
|
||||
|
||||
/* translators: used between list items, there is a space after the comma */
|
||||
$tags_list = get_the_tag_list( '', __( ', ', 'understrap' ) );
|
||||
if ( $tags_list ) {
|
||||
printf( '<span class="tags-links">' . __( 'Tagged %1$s', 'understrap' ) . '</span>', $tags_list );
|
||||
if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) {
|
||||
echo '<span class="comments-link">';
|
||||
comments_popup_link( __( 'Leave a comment', 'understrap' ), __( '1 Comment', 'understrap' ),
|
||||
__( '% Comments', 'understrap' ) );
|
||||
echo '</span>';
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) {
|
||||
echo '<span class="comments-link">';
|
||||
comments_popup_link( __( 'Leave a comment', 'understrap' ), __( '1 Comment', 'understrap' ), __( '% Comments', 'understrap' ) );
|
||||
echo '</span>';
|
||||
}
|
||||
|
||||
edit_post_link(
|
||||
sprintf(
|
||||
/* translators: %s: Name of current post */
|
||||
esc_html__( 'Edit %s', 'understrap' ),
|
||||
the_title( '<span class="screen-reader-text">"', '"</span>', false )
|
||||
),
|
||||
'<span class="edit-link">',
|
||||
'</span>'
|
||||
);
|
||||
}
|
||||
sprintf(
|
||||
/* translators: %s: Name of current post */
|
||||
esc_html__( 'Edit %s', 'understrap' ),
|
||||
the_title( '<span class="screen-reader-text">"', '"</span>', false )
|
||||
),
|
||||
'<span class="edit-link">',
|
||||
'</span>'
|
||||
);
|
||||
}
|
||||
endif;
|
||||
|
||||
/**
|
||||
|
@ -119,5 +121,6 @@ function understrap_category_transient_flusher() {
|
|||
// Like, beat it. Dig?
|
||||
delete_transient( 'understrap_categories' );
|
||||
}
|
||||
|
||||
add_action( 'edit_category', 'understrap_category_transient_flusher' );
|
||||
add_action( 'save_post', 'understrap_category_transient_flusher' );
|
||||
add_action( 'save_post', 'understrap_category_transient_flusher' );
|
||||
|
|
|
@ -6,7 +6,6 @@ function setup_theme_default_settings() {
|
|||
|
||||
// check if settings are set, if not set defaults.
|
||||
// Caution: DO NOT check existence using === always check with == .
|
||||
|
||||
// Latest blog posts style.
|
||||
$understrap_posts_index_style = get_theme_mod( 'understrap_posts_index_style' );
|
||||
if ( '' == $understrap_posts_index_style ) {
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* Utility functions
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
/**
|
||||
* Generate a custom length excerpt.
|
||||
* If the content of the post is less than the provided length,
|
||||
* the entire content is returned.
|
||||
* @param $word_count
|
||||
*
|
||||
* @param int $post_id Post's ID.
|
||||
* @param int $word_count How many words to keep.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
@ -20,7 +24,7 @@ function understrap_excerpt_with_length( $post_id, $word_count ) {
|
|||
$words = str_word_count( $content, 2 );
|
||||
$keys = array_keys( $words );
|
||||
$excerpt = substr( $content, 0, $keys[ $word_count ] );
|
||||
$link_class = " class=\"btn btn-secondary understrap-read-more-link\"";
|
||||
$link_class = ' class=\"btn btn-secondary understrap-read-more-link\"';
|
||||
$excerpt = '<p>' . $excerpt . '[...]</p>';
|
||||
$excerpt .= '<p><a href="' . $permalink . '"' . $link_class . '>Read More</a></p>';
|
||||
} else {
|
||||
|
|
|
@ -2,10 +2,13 @@
|
|||
/**
|
||||
* Declaring widgets
|
||||
*
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
if ( ! function_exists( 'understrap_widgets_init' ) ) {
|
||||
/**
|
||||
* Initializes themes widgets.
|
||||
*/
|
||||
function understrap_widgets_init() {
|
||||
register_sidebar( array(
|
||||
'name' => __( 'Right Sidebar', 'understrap' ),
|
||||
|
@ -58,5 +61,5 @@ if ( ! function_exists( 'understrap_widgets_init' ) ) {
|
|||
) );
|
||||
|
||||
}
|
||||
}
|
||||
} // endif function_exists( 'understrap_widgets_init' ).
|
||||
add_action( 'widgets_init', 'understrap_widgets_init' );
|
||||
|
|
|
@ -2,15 +2,17 @@
|
|||
/**
|
||||
* Add WooCommerce support
|
||||
*
|
||||
*
|
||||
* @package understrap
|
||||
*/
|
||||
|
||||
add_action( 'after_setup_theme', 'woocommerce_support' );
|
||||
if ( ! function_exists( 'woocommerce_support' ) ) {
|
||||
/**
|
||||
* Declares WooCommerce theme support.
|
||||
*/
|
||||
function woocommerce_support() {
|
||||
add_theme_support( 'woocommerce' );
|
||||
// hook in and customizer form fields
|
||||
// hook in and customizer form fields.
|
||||
add_filter( 'woocommerce_form_field_args', 'wc_form_field_args', 10, 3 );
|
||||
}
|
||||
}
|
||||
|
@ -19,16 +21,15 @@ if ( ! function_exists( 'woocommerce_support' ) ) {
|
|||
* Filter hook function monkey patching form classes
|
||||
* Author: Adriano Monecchi http://stackoverflow.com/a/36724593/307826
|
||||
*
|
||||
* @param $args
|
||||
* @param $key
|
||||
* @param null $value
|
||||
* @param string $args Form attributes.
|
||||
* @param string $key Not in use.
|
||||
* @param null $value Not in use.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function wc_form_field_args( $args, $key, $value = null ) {
|
||||
|
||||
// Start field type switch case
|
||||
|
||||
// Start field type switch case.
|
||||
switch ( $args['type'] ) {
|
||||
|
||||
/* Targets all select input type elements, except the country and state select input types */
|
||||
|
@ -74,7 +75,7 @@ function wc_form_field_args( $args, $key, $value = null ) {
|
|||
case 'email' :
|
||||
case 'tel' :
|
||||
case 'number' :
|
||||
$args['class'][] = 'form-group';
|
||||
$args['class'][] = 'form-group';
|
||||
$args['input_class'] = array( 'form-control', 'input-lg' );
|
||||
$args['label_class'] = array( 'control-label' );
|
||||
break;
|
||||
|
@ -99,7 +100,7 @@ function wc_form_field_args( $args, $key, $value = null ) {
|
|||
$args['input_class'] = array( 'form-control', 'input-lg' );
|
||||
$args['label_class'] = array( 'control-label' );
|
||||
break;
|
||||
}
|
||||
} // end switch ($args).
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
* @package understrap
|
||||
*/
|
||||
|
||||
/**
|
||||
* Adds support for wp.com-specific theme functions.
|
||||
*
|
||||
* @global array $themecolors
|
||||
*/
|
||||
if ( ! function_exists ( 'understrap_wpcom_setup' ) ) {
|
||||
if ( ! function_exists( 'understrap_wpcom_setup' ) ) {
|
||||
/**
|
||||
* Adds support for wp.com-specific theme functions.
|
||||
*
|
||||
* @global array $themecolors Array with theme's colors.
|
||||
*/
|
||||
function understrap_wpcom_setup() {
|
||||
global $themecolors;
|
||||
|
||||
|
|
Reference in New Issue