Make WordPress Core

Ticket #12799: gallery shortcode replacement.txt

File gallery shortcode replacement.txt, 4.4 KB (added by dtorbert, 17 years ago)

Suggested replacement for gallery_shortcode()

Line 
1<?php
2/*
3Plugin Name: Alternate Gallery Shortcode
4Plugin URI: http://davidtorbert.com
5Description: Allows the gallery to be limited to a certain number of items. This allows you to have a parent gallery page, which will link to the child galleries. Note that this function is just a block copy of the gallery_shortcode() function from Wordpress with the addition of the maximum option to the [gallery] shortcode. If/when Wordpress updates this function, we will need to update our's.
6Version: 1.0
7Author: David Torbert
8Author URI: http://davidtorbert.com
9*/
10
11
12/**
13 * The Gallery shortcode.
14 *
15 * This implements the functionality of the Gallery Shortcode for displaying
16 * WordPress images on a post.
17 *
18 * @since 2.5.0
19 *
20 * @param array $attr Attributes attributed to the shortcode.
21 * @return string HTML content to display gallery.
22 */
23function alt_gallery_shortcode($null, $attr = array()) {
24 global $post, $wp_locale;
25
26 static $instance = 0;
27 $instance++;
28
29 // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
30 if ( isset( $attr['orderby'] ) ) {
31 $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
32 if ( !$attr['orderby'] )
33 unset( $attr['orderby'] );
34 }
35
36 extract(shortcode_atts(array(
37 'order' => 'ASC',
38 'orderby' => 'menu_order ID',
39 'id' => $post->ID,
40 'itemtag' => 'dl',
41 'icontag' => 'dt',
42 'captiontag' => 'dd',
43 'columns' => 3,
44 'size' => 'thumbnail',
45 'include' => '',
46 'exclude' => '',
47 'maximum' => 0
48 ), $attr));
49
50 $id = intval($id);
51 if ( 'RAND' == $order )
52 $orderby = 'none';
53
54 if ( !empty($include) ) {
55 $include = preg_replace( '/[^0-9,]+/', '', $include );
56 $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
57
58 $attachments = array();
59 foreach ( $_attachments as $key => $val ) {
60 $attachments[$val->ID] = $_attachments[$key];
61 }
62 } elseif ( !empty($exclude) ) {
63 $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
64 $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
65 } else {
66 $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
67 }
68
69 if ( empty($attachments) )
70 return '';
71
72 if ( is_feed() ) {
73 $output = "\n";
74 foreach ( $attachments as $att_id => $attachment )
75 $output .= wp_get_attachment_link($att_id, $size, true) . "\n";
76 return $output;
77 }
78
79 $itemtag = tag_escape($itemtag);
80 $captiontag = tag_escape($captiontag);
81 $columns = intval($columns);
82 $itemwidth = $columns > 0 ? floor(100/$columns) : 100;
83 $float = $wp_locale->text_direction == 'rtl' ? 'right' : 'left';
84
85 $selector = "gallery-{$instance}";
86
87 $output = apply_filters('gallery_style', "
88 <style type='text/css'>
89 #{$selector} {
90 margin: auto;
91 }
92 #{$selector} .gallery-item {
93 float: {$float};
94 margin-top: 10px;
95 text-align: center;
96 width: {$itemwidth}%; }
97 #{$selector} img {
98 border: 2px solid #cfcfcf;
99 }
100 #{$selector} .gallery-caption {
101 margin-left: 0;
102 }
103 </style>
104 <!-- see gallery_shortcode() in wp-includes/media.php -->
105 <div id='$selector' class='gallery galleryid-{$id}'>");
106
107 $i = 0;
108 foreach ( $attachments as $id => $attachment ) {
109 $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
110
111 $output .= "<{$itemtag} class='gallery-item'>";
112 $output .= "
113 <{$icontag} class='gallery-icon'>
114 $link
115 </{$icontag}>";
116 if ( $captiontag && trim($attachment->post_excerpt) ) {
117 $output .= "
118 <{$captiontag} class='gallery-caption'>
119 " . wptexturize($attachment->post_excerpt) . "
120 </{$captiontag}>";
121 }
122 $output .= "</{$itemtag}>";
123 if ( $columns > 0 && ++$i % $columns == 0 )
124 $output .= '<br style="clear: both" />';
125 if (($maximum != 0 && ($i >= $maximum))
126 {
127 break;
128 }
129 }
130
131 $output .= "
132 <br style='clear: both;' />
133 </div>\n";
134
135 return $output;
136}
137
138add_filter('post_gallery', 'alt_gallery_shortcode', 10, 2);
139
140?>