147 lines
3.9 KiB
PHP
147 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* 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' );
|
|
|
|
/**
|
|
* 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";
|
|
}
|
|
|
|
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-xs-up">' . wptexturize( $attachment->post_excerpt ) . '</div>';
|
|
}
|
|
$output .= '</div>';
|
|
$i ++;
|
|
$output .= ( $i % $columns == 0 ) ? '</div>' : '';
|
|
}
|
|
$output .= ( $i % $columns != 0 ) ? '</div>' : '';
|
|
$output .= '</div>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
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 );
|