Last active
April 26, 2016 23:30
-
-
Save chonz0/502ca9fe51f9b89139d1ab67ea7a64a8 to your computer and use it in GitHub Desktop.
WordPress gallery filter to modify the HTML output of the default gallery shortcode and style
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Custom filter function to modify default gallery shortcode output | |
// original source: http://robido.com/wordpress/wordpress-gallery-filter-to-modify-the-html-output-of-the-default-gallery-shortcode-and-style/ | |
function my_post_gallery( $output, $attr ) { | |
// Initialize | |
global $post, $wp_locale; | |
// 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' => 'dl', | |
'icontag' => 'dt', | |
'captiontag' => 'dd', | |
'columns' => 3, | |
'size' => 'thumbnail', | |
'include' => '', | |
'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( 100 / $columns ) : 100; | |
$float = is_rtl() ? 'right' : 'left'; | |
$selector = "gallery-{$instance}"; | |
// Filter gallery CSS | |
$output = apply_filters( 'gallery_style', " | |
<style type='text/css'> | |
#{$selector} { | |
margin: auto; | |
} | |
#{$selector} .gallery-item { | |
float: {$float}; | |
margin-top: 10px; | |
text-align: center; | |
width: {$itemwidth}%; | |
} | |
#{$selector} img { | |
border: 2px solid #cfcfcf; | |
} | |
#{$selector} .gallery-caption { | |
margin-left: 0; | |
} | |
</style> | |
<!-- see gallery_shortcode() in wp-includes/media.php --> | |
<div id='$selector' class='gallery galleryid-{$id}'>" | |
); | |
// 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'>"; | |
// 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; | |
} | |
// Apply filter to default gallery shortcode | |
add_filter( 'post_gallery', 'my_post_gallery', 10, 2 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment