Skip to content

Instantly share code, notes, and snippets.

@sevenspark
Created August 10, 2012 20:34
Show Gist options
  • Save sevenspark/3317648 to your computer and use it in GitHub Desktop.
Save sevenspark/3317648 to your computer and use it in GitHub Desktop.
Gallery Shortcode
/**
* Agility's Gallery shortcode, implemented by filter
*/
add_filter( 'post_gallery', 'agility_gallery_shortcode', 10, 2 );
function agility_gallery_shortcode( $output, $attr ) {
global $post;
static $instance = 0;
$instance++;
// We're trusting author input, so let's at least 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'] );
}
extract( shortcode_atts(array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post->ID,
'itemtag' => 'div',
'icontag' => 'div',
'captiontag' => 'span',
'columns' => 3,
'size' => 'large',
'include' => '',
'exclude' => '',
'lightbox' => 'on',
'caption' => 'off',
), $attr) );
$gallery_id = intval($id);
if ( 'RAND' == $order )
$orderby = 'none';
if ( !empty($include) ) {
$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) );
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[$val->ID] = $_attachments[$key];
}
} elseif ( !empty($exclude) ) {
$exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
$attachments = get_children( array('post_parent' => $gallery_id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
} else {
$attachments = get_children( array('post_parent' => $gallery_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;
}
$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}";
$gallery_style = $gallery_div = '';
$size_class = sanitize_html_class( $size );
$gallery_div = "<div id='$selector' class='gallery galleryid-{$gallery_id} gallery-columns-{$columns} gallery-size-{$size_class} clearfix'>";
$output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div );
$i = 0;
$cols = agility_one_over( $columns );
$output.= '<div class="row">';
foreach ( $attachments as $id => $attachment ) {
if( $lightbox == 'on' ){
$id = intval( $id );
$_post = & get_post( $id );
if ( empty( $_post ) || ( 'attachment' != $_post->post_type ) || ! $url = wp_get_attachment_url( $_post->ID ) ){
$link = __( 'Missing Attachment', 'agility' );
}
else{
$post_title = esc_attr( $_post->post_title );
if ( $size && 'none' != $size )
$link_text = wp_get_attachment_image( $id, $size, false, array( 'alt' => $post_title, 'class' => "attachment-$size scale-with-grid" ) );
else
$link_text = '';
if ( trim( $link_text ) == '' )
$link_text = $_post->post_title;
$link = '<a href="'.$url.'" data-rel="prettyPhoto[gallery-'.$gallery_id.']" title="'.strip_tags( $attachment->post_excerpt ).'">'.$link_text.'</a>';
}
}
else{
$link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
}
$class = "one-$cols column";
if( $i % $columns == 0 ) $class.= ' alpha';
else if( ( $i + 1) % $columns == 0 ) $class.= ' omega';
$output .= "<{$itemtag} class='gallery-item $class'>";
$output .=
"<{$icontag} class='gallery-icon'>$link</{$icontag}>";
if ( $caption == 'on' && $captiontag && trim($attachment->post_excerpt) ) {
$output .=
"<{$captiontag} class='wp-caption-text gallery-caption'>" .
wptexturize($attachment->post_excerpt) .
"</{$captiontag}>";
}
$output .= "</{$itemtag}>";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '</div><div class="row">';
}
$output .= "
</div>
</div>\n";
return $output;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment