2016-05-17 15:41:00 +00:00
< ? php
2016-11-21 10:41:29 +00:00
//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 ) {
2016-05-17 15:41:00 +00:00
2016-11-21 10:41:29 +00:00
// Initialize
global $post , $wp_locale ;
// Gallery instance counter
2016-11-01 16:13:23 +00:00
static $instance = 0 ;
$instance ++ ;
2016-11-21 10:41:29 +00:00
// Validate the author's orderby attribute
if ( isset ( $attr [ 'orderby' ] ) ) {
$attr [ 'orderby' ] = sanitize_sql_orderby ( $attr [ 'orderby' ] );
if ( ! $attr [ 'orderby' ] ) unset ( $attr [ 'orderby' ] );
2016-11-14 12:41:30 +00:00
}
2016-11-21 10:41:29 +00:00
// Get attributes from shortcode
extract ( shortcode_atts ( array (
2016-11-01 16:13:23 +00:00
'order' => 'ASC' ,
'orderby' => 'menu_order ID' ,
'id' => $post -> ID ,
2016-11-21 10:41:29 +00:00
'itemtag' => 'div' ,
'icontag' => 'div' ,
'captiontag' => 'div' ,
2016-11-01 16:13:23 +00:00
'columns' => 3 ,
'size' => 'thumbnail' ,
2016-11-21 10:41:29 +00:00
'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 ];
2016-11-01 16:13:23 +00:00
}
2016-11-21 10:41:29 +00:00
} 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 ) );
2016-11-01 16:13:23 +00:00
} else {
2016-11-21 10:41:29 +00:00
// Setup attachments array
$attachments = get_children ( array ( 'post_parent' => $id , 'post_status' => 'inherit' , 'post_type' => 'attachment' , 'post_mime_type' => 'image' , 'order' => $order , 'orderby' => $orderby ) );
2016-11-14 12:41:30 +00:00
}
2016-11-21 10:41:29 +00:00
if ( empty ( $attachments ) ) return '' ;
// Filter gallery differently for feeds
if ( is_feed () ) {
2016-11-01 16:13:23 +00:00
$output = " \n " ;
2016-11-21 10:41:29 +00:00
foreach ( $attachments as $att_id => $attachment ) $output .= wp_get_attachment_link ( $att_id , $size , true ) . " \n " ;
2016-11-01 16:13:23 +00:00
return $output ;
}
2016-11-21 10:41:29 +00:00
// 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
2016-11-01 16:13:23 +00:00
$i = 0 ;
2016-11-21 10:41:29 +00:00
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 } > " ;
2016-11-14 12:41:30 +00:00
}
2016-11-21 10:41:29 +00:00
// End itemtag
$output .= " </ { $itemtag } > " ;
// Line breaks by columns set
if ( $columns > 0 && ++ $i % $columns == 0 ) $output .= '<br style="clear: both">' ;
2016-11-01 16:13:23 +00:00
}
2016-11-21 10:41:29 +00:00
// End gallery output
$output .= "
< br style = 'clear: both;' >
</ div > \n " ;
2016-11-01 16:13:23 +00:00
return $output ;
2016-11-21 10:41:29 +00:00
2016-05-17 15:41:00 +00:00
}
2016-11-21 10:41:29 +00:00
// Apply filter to default gallery shortcode
add_filter ( 'post_gallery' , 'bootstrap_wp_gallery' , 10 , 2 );