biofriction-wp-theme/library/foundation.php

354 lines
14 KiB
PHP

<?php
/**
* Foundation PHP template
*
* @package Biofriction
* @since Biofriction 1.0.0
*/
// Pagination.
if ( ! function_exists( 'foundationpress_pagination' ) ) :
function foundationpress_pagination() {
global $wp_query;
$big = 999999999; // This needs to be an unlikely integer
// For more options and info view the docs for paginate_links()
// http://codex.wordpress.org/Function_Reference/paginate_links
$paginate_links = paginate_links(
array(
'base' => str_replace( $big, '%#%', html_entity_decode( get_pagenum_link( $big ) ) ),
'current' => max( 1, get_query_var( 'paged' ) ),
'total' => $wp_query->max_num_pages,
'mid_size' => 5,
'prev_next' => true,
'prev_text' => '',
'next_text' => '',
'type' => 'list',
)
);
// Display the pagination if more than one page is found.
if ( $paginate_links ) {
// Match patterns for preg_replace
$preg_find = [
'/\s*page-numbers\s*/', // Captures string 'page-numbers' and any whitespace before and after
"/\s*class=''/", // Captures any empty class attributes
'/<li><a class="prev" href="(\S+)">/', // '(\S+)' Captures href value for backreference
'/<li><a class="next" href="(\S+)">/', // '(\S+)' Captures href value for backreference
"/<li><span aria-current='page' class='current'>(\d+)<\/span><\/li>/", // '(\d+)' Captures page number for backreference
"/<li><a href='(\S+)'>(\d+)<\/a><\/li>/", // '(\S+)' Captures href value for backreference, (\d+)' Captures page number for backreference
];
// preg_replace replacements
$preg_replace = [
'',
'',
'<li class="pagination-previous"><a href="$1" aria-label="Previous page">', // '$1' Outputs backreference href value
'<li class="pagination-next"><a href="$1" aria-label="Next page">', // '$1' Outputs backreference href value
'<li class="current" aria-current="page"><span class="show-for-sr">You\'re on page </span>$1</li>', // '$1' Outputs backreference page number
'<li><a href="$1" aria-label="Page $2">$2</a></li>', // '$1' Ouputs backreference href, '$2' outputs backreference page number
];
// Match patterns for str_replace
$str_find = [
"<ul>",
'<li><span class="dots">&hellip;</span></li>',
];
// str_replace replacements
$str_replace = [
'<ul class="pagination text-center">',
'<li class="ellipsis" aria-hidden="true"></li>',
];
$paginate_links = preg_replace( $preg_find, $preg_replace, $paginate_links );
$paginate_links = str_replace( $str_find, $str_replace, $paginate_links );
$paginate_links = '<nav aria-label="Pagination">' . $paginate_links . '</nav>';
echo $paginate_links;
}
}
endif;
// Custom Comments Pagination.
if ( ! function_exists( 'foundationpress_get_the_comments_pagination' ) ) :
function foundationpress_get_the_comments_pagination( $args = array() ) {
$navigation = '';
$args = wp_parse_args( $args, array(
'prev_text' => __( '&laquo;', 'foundationpress' ),
'next_text' => __( '&raquo;', 'foundationpress' ),
'size' => 'default',
'show_disabled' => true,
) );
$args['type'] = 'array';
$args['echo'] = false;
$links = paginate_comments_links( $args );
if ( $links ) {
$link_count = count( $links );
$pagination_class = 'pagination';
if ( 'large' == $args['size'] ) {
$pagination_class .= ' pagination-lg';
} elseif ( 'small' == $args['size'] ) {
$pagination_class .= ' pagination-sm';
}
$current = get_query_var( 'cpage' ) ? intval( get_query_var( 'cpage' ) ) : 1;
$total = get_comment_pages_count();
$navigation .= '<ul class="' . $pagination_class . '">';
if ( $args['show_disabled'] && 1 === $current ) {
$navigation .= '<li class="page-item disabled">' . $args['prev_text'] . '</li>';
}
foreach ( $links as $index => $link ) {
if ( 0 == $index && 0 === strpos( $link, '<a class="prev' ) ) {
$navigation .= '<li class="page-item">' . str_replace( 'prev page-numbers', 'page-link', $link ) . '</li>';
} elseif ( $link_count - 1 == $index && 0 === strpos( $link, '<a class="next' ) ) {
$navigation .= '<li class="page-item">' . str_replace( 'next page-numbers', 'page-link', $link ) . '</li>';
} else {
$link = preg_replace( "/(class|href)='(.*)'/U", '$1="$2"', $link );
if ( 0 === strpos( $link, '<span class="page-numbers current' ) ) {
$navigation .= '<li class="page-item active">' . str_replace( array( '<span class="page-numbers current">', '</span>' ), array( '<a class="page-link" href="#">', '</a>' ), $link ) . '</li>';
} elseif ( 0 === strpos( $link, '<span class="page-numbers dots' ) ) {
$navigation .= '<li class="page-item disabled">' . str_replace( array( '<span class="page-numbers dots">', '</span>' ), array( '<a class="page-link" href="#">', '</a>' ), $link ) . '</li>';
} else {
$navigation .= '<li class="page-item">' . str_replace( 'class="page-numbers', 'class="page-link', $link ) . '</li>';
}
}
}
if ( $args['show_disabled'] && $current == $total ) {
$navigation .= '<li class="page-item disabled">' . $args['next_text'] . '</li>';
}
$navigation .= '</ul>';
$navigation = _navigation_markup( $navigation, 'comments-pagination' );
}
return $navigation;
}
endif;
// Custom Comments Pagination.
if ( ! function_exists( 'foundationpress_the_comments_pagination' ) ) :
function foundationpress_the_comments_pagination( $args = array() ) {
echo foundationpress_get_the_comments_pagination( $args );
}
endif;
/**
* A fallback when no navigation is selected by default.
*/
if ( ! function_exists( 'foundationpress_menu_fallback' ) ) :
function foundationpress_menu_fallback() {
echo '<div class="alert-box secondary">';
/* translators: %1$s: link to menus, %2$s: link to customize. */
printf(
__( 'Please assign a menu to the primary menu location under %1$s or %2$s the design.', 'foundationpress' ),
/* translators: %s: menu url */
sprintf(
__( '<a href="%s">Menus</a>', 'foundationpress' ),
get_admin_url( get_current_blog_id(), 'nav-menus.php' )
),
/* translators: %s: customize url */
sprintf(
__( '<a href="%s">Customize</a>', 'foundationpress' ),
get_admin_url( get_current_blog_id(), 'customize.php' )
)
);
echo '</div>';
}
endif;
// Add Foundation 'is-active' class for the current menu item.
if ( ! function_exists( 'foundationpress_active_nav_class' ) ) :
function foundationpress_active_nav_class( $classes, $item ) {
if ( $item->current == 1 || $item->current_item_ancestor == true ) {
$classes[] = 'is-active';
}
return $classes;
}
add_filter( 'nav_menu_css_class', 'foundationpress_active_nav_class', 10, 2 );
endif;
/**
* Use the is-active class of ZURB Foundation on wp_list_pages output.
* From required+ Foundation http://themes.required.ch.
*/
if ( ! function_exists( 'foundationpress_active_list_pages_class' ) ) :
function foundationpress_active_list_pages_class( $input ) {
$pattern = '/current_page_item/';
$replace = 'current_page_item is-active';
$output = preg_replace( $pattern, $replace, $input );
return $output;
}
add_filter( 'wp_list_pages', 'foundationpress_active_list_pages_class', 10, 2 );
endif;
/**
* Get mobile menu ID
*/
if ( ! function_exists( 'foundationpress_mobile_menu_id' ) ) :
function foundationpress_mobile_menu_id() {
if ( get_theme_mod( 'wpt_mobile_menu_layout' ) === 'offcanvas' ) {
echo 'off-canvas-menu';
} else {
echo 'mobile-menu';
}
}
endif;
/**
* Get title bar responsive toggle attribute
*/
if ( ! function_exists( 'foundationpress_title_bar_responsive_toggle' ) ) :
function foundationpress_title_bar_responsive_toggle() {
if ( ! get_theme_mod( 'wpt_mobile_menu_layout' ) || get_theme_mod( 'wpt_mobile_menu_layout' ) === 'topbar' ) {
echo 'data-responsive-toggle="mobile-menu"';
}
}
endif;
/**
* Custom markup for Wordpress gallery
*/
if ( ! function_exists( 'foundationpress_gallery' ) ) :
function foundationpress_gallery($attr) {
$post = get_post();
static $instance = 0;
$instance++;
if ( ! empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) )
$attr['orderby'] = 'post__in';
$attr['include'] = $attr['ids'];
}
// Allow plugins/themes to override the default gallery template.
$output = apply_filters('post_gallery', '', $attr, $instance);
if ( $output != '' )
return $output;
// Let's make sure it looks like a valid orderby statement
if ( isset( $attr['orderby'] ) ) {
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
if ( !$attr['orderby'] )
unset( $attr['orderby'] );
}
$atts = shortcode_atts(array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post ? $post->ID : 0,
'itemtag' => 'figure',
'icontag' => 'div',
'captiontag' => 'figcaption',
'columns-small' => 2, // set default columns for small screen
'columns-medium'=> 4, // set default columns for medium screen
'columns' => 4, // set default columns for large screen (3 = wordpress default)
'size' => 'medium',
'include' => '',
'exclude' => ''
), $attr, 'gallery');
$id = intval($atts['id']);
if ( !empty($atts['include']) ) {
$_attachments = get_posts( array('include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby']) );
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[$val->ID] = $_attachments[$key];
}
} elseif ( !empty($atts['exclude']) ) {
$attachments = get_children( array('post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby']) );
} else {
$attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby']) );
}
if ( empty($attachments) )
return '';
if ( is_feed() ) {
$output = "\n";
foreach ( $attachments as $att_id => $attachment )
$output .= wp_get_attachment_link($att_id, $atts['size'], true) . "\n";
return $output;
}
$item_tag = tag_escape($atts['itemtag']);
$caption_tag = tag_escape($atts['captiontag']);
$icon_tag = tag_escape($atts['icontag']);
$valid_tags = wp_kses_allowed_html( 'post' );
if ( ! isset( $valid_tags[ $item_tag ] ) )
$item_tag = 'figure';
if ( ! isset( $valid_tags[ $caption_tag ] ) )
$caption_tag = 'figcaption';
if ( ! isset( $valid_tags[ $icon_tag ] ) )
$icon_tag = 'div';
$columns = intval($atts['columns']);
$columns_small = intval($atts['columns-small']);
$columns_medium = intval($atts['columns-medium']);
$selector = "gallery-{$instance}";
$size_class = sanitize_html_class( $atts['size'] );
// Edit this line to modify the default number of grid columns for the small and medium sizes. The large size is passed in the WordPress gallery settings.
$output = "<div id='$selector' class='fp-gallery galleryid-{$id} gallery-size-{$size_class} grid-x grid-margin-x small-up-{$columns_small} medium-up-{$columns_medium} large-up-{$columns}'>";
foreach ( $attachments as $id => $attachment ) {
// Check if destination is file, nothing or attachment page.
if ( isset($attr['link']) && $attr['link'] == 'file' ){
$link = wp_get_attachment_link($id, $size_class, false, false, false,array('class' => '', 'id' => "imageid-$id"));
// Edit this line to implement your html params in <a> tag with use a custom lightbox plugin.
$link = str_replace('<a href', '<a class="thumbnail fp-gallery-lightbox" data-gall="fp-gallery-'. $post->ID .'" data-title="'. wptexturize($attachment->post_excerpt) .'" title="'. wptexturize($attachment->post_excerpt) .'" href', $link);
} elseif ( isset($attr['link']) && $attr['link'] == 'none' ){
$link = wp_get_attachment_image($id,$size_class,false, array('class' => "thumbnail attachment-$size_class size-$size_class", 'id' => "imageid-$id"));
} else {
$link = wp_get_attachment_link($id, $size_class, true, false, false,array('class' => '', 'id' => "imageid-$id"));
$link = str_replace('<a href', '<a class="thumbnail" title="'. wptexturize($attachment->post_excerpt) .'" href', $link);
}
$image_meta = wp_get_attachment_metadata( $id );
$orientation = '';
if ( isset( $image_meta['height'], $image_meta['width'] ) ) {
$orientation = ( $image_meta['height'] > $image_meta['width'] ) ? 'portrait' : 'landscape';
}
$output .= "<{$item_tag} class='fp-gallery-item cell'>";
$output .= "
<{$icon_tag} class='fp-gallery-icon {$orientation}'>
$link
</{$icon_tag}>";
// Uncomment if you wish to display captions inline on gallery.
if ( $caption_tag && trim($attachment->post_excerpt) ) {
$output .= "
<{$caption_tag} class='wp-caption-text gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</{$caption_tag}>";
}
$output .= "</{$item_tag}>";
}
$output .= "</div>\n";
return $output;
}
add_shortcode('gallery', 'foundationpress_gallery');
endif;