Builds the Gallery shortcode output.
Description
This implements the functionality of the Gallery Shortcode for displaying WordPress images on a post.
Parameters
$attrarrayrequired- Attributes of the gallery shortcode.
orderstringOrder of the images in the gallery. Default'ASC'. Accepts'ASC','DESC'.orderbystringThe field to use when ordering the images. Default ‘menu_order ID’.
Accepts any valid SQL ORDERBY statement.idintPost ID.itemtagstringHTML tag to use for each image in the gallery.
Default'dl', or'figure'when the theme registers HTML5 gallery support.icontagstringHTML tag to use for each image’s icon.
Default'dt', or'div'when the theme registers HTML5 gallery support.captiontagstringHTML tag to use for each image’s caption.
Default'dd', or'figcaption'when the theme registers HTML5 gallery support.columnsintNumber of columns of images to display. Default 3.sizestring|int[]Size of the images to display. Accepts any registered image size name, or an array of width and height values in pixels (in that order). Default'thumbnail'.idsstringA comma-separated list of IDs of attachments to display. Default empty.includestringA comma-separated list of IDs of attachments to include. Default empty.excludestringA comma-separated list of IDs of attachments to exclude. Default empty.linkstringWhat to link each image to. Default empty (links to the attachment page).
Accepts'file','none'.
Source
$id = 'id="' . esc_attr( $atts['id'] ) . '" ';
}
if ( $atts['caption_id'] ) {
$atts['caption_id'] = sanitize_html_class( $atts['caption_id'] );
} elseif ( $atts['id'] ) {
$atts['caption_id'] = 'caption-' . str_replace( '_', '-', $atts['id'] );
}
if ( $atts['caption_id'] ) {
$caption_id = 'id="' . esc_attr( $atts['caption_id'] ) . '" ';
$describedby = 'aria-describedby="' . esc_attr( $atts['caption_id'] ) . '" ';
}
$class = trim( 'wp-caption ' . $atts['align'] . ' ' . $atts['class'] );
$html5 = current_theme_supports( 'html5', 'caption' );
// HTML5 captions never added the extra 10px to the image width.
$width = $html5 ? $atts['width'] : ( 10 + $atts['width'] );
/**
* Filters the width of an image's caption.
*
* By default, the caption is 10 pixels greater than the width of the image,
* to prevent post content from running up against a floated image.
*
* @since 3.7.0
*
* @see img_caption_shortcode()
*
* @param int $width Width of the caption in pixels. To remove this inline style,
* return zero.
* @param array $atts Attributes of the caption shortcode.
* @param string $content The image element, possibly wrapped in a hyperlink.
*/
$caption_width = apply_filters( 'img_caption_shortcode_width', $width, $atts, $content );
$style = '';
if ( $caption_width ) {
$style = 'style="width: ' . (int) $caption_width . 'px" ';
}
if ( $html5 ) {
$html = sprintf(
'<figure %s%s%sclass="%s">%s%s</figure>',
$id,
$describedby,
$style,
esc_attr( $class ),
do_shortcode( $content ),
sprintf(
'<figcaption %sclass="wp-caption-text">%s</figcaption>',
$caption_id,
$atts['caption']
)
);
} else {
$html = sprintf(
'<div %s%sclass="%s">%s%s</div>',
$id,
$style,
esc_attr( $class ),
str_replace( '<img ', '<img ' . $describedby, do_shortcode( $content ) ),
sprintf(
'<p %sclass="wp-caption-text">%s</p>',
$caption_id,
$atts['caption']
)
);
}
return $html;
}
add_shortcode( 'gallery', 'gallery_shortcode' );
/**
* Builds the Gallery shortcode output.
*
* This implements the functionality of the Gallery Shortcode for displaying
* WordPress images on a post.
*
* @since 2.5.0
* @since 2.8.0 Added the `$attr` parameter to set the shortcode output. New attributes included
* such as `size`, `itemtag`, `icontag`, `captiontag`, and columns. Changed markup from
* `div` tags to `dl`, `dt` and `dd` tags. Support more than one gallery on the
* same page.
* @since 2.9.0 Added support for `include` and `exclude` to shortcode.
* @since 3.5.0 Use get_post() instead of global `$post`. Handle mapping of `ids` to `include`
* and `orderby`.
* @since 3.6.0 Added validation for tags used in gallery shortcode. Add orientation information to items.
* @since 3.7.0 Introduced the `link` attribute.
* @since 3.9.0 `html5` gallery support, accepting 'itemtag', 'icontag', and 'captiontag' attributes.
* @since 4.0.0 Removed use of `extract()`.
* @since 4.1.0 Added attribute to `wp_get_attachment_link()` to output `aria-describedby`.
* @since 4.2.0 Passed the shortcode instance ID to `post_gallery` and `post_playlist` filters.
* @since 4.6.0 Standardized filter docs to match documentation standards for PHP.
* @since 5.1.0 Code cleanup for WPCS 1.0.0 coding standards.
* @since 5.3.0 Saved progress of intermediate image creation after upload.
* @since 5.5.0 Ensured that galleries can be output as a list of links in feeds.
* @since 5.6.0 Replaced order-style PHP type conversion functions with typecasts. Fix logic for
* an array of image dimensions.
*
* @param array $attr {
* Attributes of the gallery shortcode.
*
* @type string $order Order of the images in the gallery. Default 'ASC'. Accepts 'ASC', 'DESC'.
* @type string $orderby The field to use when ordering the images. Default 'menu_order ID'.
* Accepts any valid SQL ORDERBY statement.
* @type int $id Post ID.
* @type string $itemtag HTML tag to use for each image in the gallery.
* Default 'dl', or 'figure' when the theme registers HTML5 gallery support.
* @type string $icontag HTML tag to use for each image's icon.
* Default 'dt', or 'div' when the theme registers HTML5 gallery support.
* @type string $captiontag HTML tag to use for each image's caption.
* Default 'dd', or 'figcaption' when the theme registers HTML5 gallery support.
* @type int $columns Number of columns of images to display. Default 3.
* @type string|int[] $size Size of the images to display. Accepts any registered image size name, or an array
* of width and height values in pixels (in that order). Default 'thumbnail'.
* @type string $ids A comma-separated list of IDs of attachments to display. Default empty.
* @type string $include A comma-separated list of IDs of attachments to include. Default empty.
* @type string $exclude A comma-separated list of IDs of attachments to exclude. Default empty.
* @type string $link What to link each image to. Default empty (links to the attachment page).
* Accepts 'file', 'none'.
* }
* @return string HTML content to display gallery.
*/
function gallery_shortcode( $attr ) {
$post = get_post();
static $instance = 0;
++$instance;
if ( ! empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) ) {
$attr['orderby'] = 'post__in';
}
$attr['include'] = $attr['ids'];
}
/**
* Filters the default gallery shortcode output.
*
* If the filtered output isn't empty, it will be used instead of generating
* the default gallery template.
*
* @since 2.5.0
* @since 4.2.0 The `$instance` parameter was added.
*
* @see gallery_shortcode()
*
* @param string $output The gallery output. Default empty.
* @param array $attr Attributes of the gallery shortcode.
* @param int $instance Unique numeric ID of this gallery shortcode instance.
*/
$output = apply_filters( 'post_gallery', '', $attr, $instance );
if ( ! empty( $output ) ) {
return $output;
}
$html5 = current_theme_supports( 'html5', 'gallery' );
$atts = shortcode_atts(
array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post ? $post->ID : 0,
'itemtag' => $html5 ? 'figure' : 'dl',
'icontag' => $html5 ? 'div' : 'dt',
'captiontag' => $html5 ? 'figcaption' : 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => '',
'link' => '',
),
$attr,
'gallery'
);
$id = (int) $atts['id'];
if ( ! empty( $atts['include'] ) ) {
$_attachments = get_posts(
array(
'include' => $atts['include'],
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[ $val->ID ] = $_attachments[ $key ];
}
} elseif ( ! empty( $atts['exclude'] ) ) {
$post_parent_id = $id;
$attachments = get_children(
array(
'post_parent' => $id,
'exclude' => $atts['exclude'],
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
} else {
$post_parent_id = $id;
$attachments = get_children(
array(
'post_parent' => $id,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
}
if ( ! empty( $post_parent_id ) ) {
$post_parent = get_post( $post_parent_id );
// Terminate the shortcode execution if the user cannot read the post or it is password-protected.
if ( ! is_post_publicly_viewable( $post_parent->ID ) && ! current_user_can( 'read_post', $post_parent->ID )
|| post_password_required( $post_parent )
) {
return '';
}
}
if ( empty( $attachments ) ) {
return '';
}
if ( is_feed() ) {
$output = "\n";
foreach ( $attachments as $att_id => $attachment ) {
if ( ! empty( $atts['link'] ) ) {
if ( 'none' === $atts['link'] ) {
$output .= wp_get_attachment_image( $att_id, $atts['size'], false, $attr );
} else {
$output .= wp_get_attachment_link( $att_id, $atts['size'], false );
}
Changelog
| Version | Description |
|---|---|
| 5.6.0 | Replaced order-style PHP type conversion functions with typecasts. Fix logic for an array of image dimensions. |
| 5.5.0 | Ensured that galleries can be output as a list of links in feeds. |
| 5.3.0 | Saved progress of intermediate image creation after upload. |
| 5.1.0 | Code cleanup for WPCS 1.0.0 coding standards. |
| 4.6.0 | Standardized filter docs to match documentation standards for PHP. |
| 4.2.0 | Passed the shortcode instance ID to post_gallery and post_playlist filters. |
| 4.1.0 | Added attribute to wp_get_attachment_link() to output aria-describedby. |
| 4.0.0 | Removed use of extract(). |
| 3.9.0 | html5 gallery support, accepting 'itemtag', 'icontag', and 'captiontag' attributes. |
| 3.7.0 | Introduced the link attribute. |
| 3.6.0 | Added validation for tags used in gallery shortcode. Add orientation information to items. |
| 3.5.0 | Use get_post() instead of global $post. Handle mapping of ids to include and orderby. |
| 2.9.0 | Added support for include and exclude to shortcode. |
| 2.8.0 | Added the $attr parameter to set the shortcode output. New attributes included such as size, itemtag, icontag, captiontag, and columns. Changed markup from div tags to dl, dt and dd tags. Support more than one gallery on the same page. |
| 2.5.0 | Introduced. |
Basic Example
Adds the gallery shortcode.