Created
April 22, 2015 16:37
-
-
Save safranck/59be85741ab749c0ba9f to your computer and use it in GitHub Desktop.
Gallery Replaccment
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
<?php | |
/* | |
Plugin Name: WPSE-45326 Gallery Replacement example | |
Plugin URI: http://wordpress.stackexchange.com/questions/45326 | |
Description: A plugin to demonstrate how to replace the default 'gallery' shortcode and add additional HTML tags for more customization. | |
Version: 1.0 | |
Author: Tom Auger | |
Author URI: http://www.tomauger.com | |
License: GPL2 | |
*/ | |
class wpse_45326_Gallery_Replacement { | |
function __construct(){ | |
// Hook on the plugins-loaded action since it's the first real action hook that's available to us. | |
// However, if you're using a theme and want to replace that theme's `gallery` custom shortcode, | |
// you may need to use another action. Search through your parent theme's files for 'gallery' and see | |
// what hook it's using to define it's gallery shortcode, so you can make sure this code runs AFTER their code. | |
add_action( "init", array( __CLASS__, "init" ) ); | |
} | |
function init(){ | |
remove_shortcode( 'gallery' ); // Remove the default gallery shortcode implementation | |
add_shortcode( 'gallery', array( __CLASS__, "gallery_shortcode" ) ); // And replace it with our own! | |
} | |
/** | |
* The Gallery shortcode. | |
* | |
* This has been taken verbatim from wp-includes/media.php. There's a lot of good stuff in there. | |
* All you want to do is add some more HTML to it, and since (for some reason) they didn't provide more | |
* filters to be able to add, we have to replace the Gallery shortcode wholesale. | |
* | |
* @param array $attr Attributes of the shortcode. | |
* @return string HTML content to display gallery. | |
*/ | |
function gallery_shortcode($attr) { | |
global $post; | |
static $instance = 0; | |
$instance++; | |
$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'] ); | |
} | |
// NOTE: These are all the 'options' you can pass in through the shortcode definition, eg: [gallery itemtag='p'] | |
extract(shortcode_atts(array( | |
'order' => 'DESC', | |
'orderby' => 'menu_order ID', | |
'id' => $post->ID, | |
'itemtag' => 'dl', | |
'icontag' => 'dt', | |
'captiontag' => 'dd', | |
'columns' => 3, | |
'size' => 'thumbnail', | |
'include' => '', | |
'exclude' => '', | |
// Here's the new options stuff we added to the shortcode defaults | |
'titletag' => 'p', | |
'descriptiontag' => 'p' | |
), $attr)); | |
$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' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); | |
} else { | |
$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 ''; | |
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 = ''; | |
if ( apply_filters( 'use_default_gallery_style', true ) ) | |
$gallery_style = " | |
<style type='text/css'> | |
#{$selector} { | |
margin: auto; | |
} | |
#{$selector} .gallery-item { | |
float: {$float}; | |
margin-top: 10px; | |
text-align: center; | |
width: {$itemwidth}%; | |
} | |
#{$selector} .gallery-item-title { | |
margin: 0; | |
} | |
#{$selector} .gallery-item-description { | |
margin: 0; | |
} | |
#{$selector} img { | |
border: 0; | |
} | |
#{$selector} .gallery-caption { | |
margin-left: 0; | |
} | |
</style> | |
<!-- see gallery_shortcode() in wp-includes/media.php -->"; | |
$size_class = sanitize_html_class( $size ); | |
$gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; | |
$output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); | |
$i = 0; | |
foreach ( $attachments as $id => $attachment ) { | |
$link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); | |
$output .= "<{$itemtag} class='gallery-item'>"; | |
$output .= " | |
<{$icontag} class='gallery-icon'> | |
$link | |
</{$icontag}>"; | |
// MODIFICATION: include the title and description HTML if we've supplied the relevant shortcode parameters (titletag, descriptiontag) | |
if ( $captiontag ) { | |
$output .= " | |
<{$captiontag} class='wp-caption-text gallery-caption'>"; | |
// The CAPTION, if there is one | |
//if ( trim( $attachment->post_excerpt ) ) { | |
// $output .= " | |
// " . wptexturize($attachment->post_excerpt); | |
//} | |
// The TITLE, if we've not made the 'titletag' param blank | |
if ( $titletag ){ | |
$output .= " | |
<{$titletag} class=\"gallery-item-title\">" . $attachment->post_title . "</{$titletag}>"; | |
} | |
// The DESCRIPTION, if we've not specified a blank 'descriptiontag' | |
if ( $descriptiontag ){ | |
$output .= " | |
<{$descriptiontag} class=\"gallery-item-description\">" . wptexturize( $attachment->post_content ) . "</{$descriptiontag}>"; | |
} | |
$option .= " | |
</{$captiontag}>"; | |
} | |
$output .= "</{$itemtag}>"; | |
if ( $columns > 0 && ++$i % $columns == 0 ) | |
$output .= '<br style="clear: both" />'; | |
} | |
$output .= " | |
<br style='clear: both;' /> | |
</div>\n"; | |
return $output; | |
} | |
} | |
new wpse_45326_Gallery_Replacement(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment