get_post_galleries() │ WP 3.6.0
Retrieves galleries from the passed post's content.
1 time — 0.009364 sec (very slow) | 50000 times — 538.27 sec (extremely slow) | PHP 7.0.4, WP 4.4.2
Return
Array
. A list of arrays, each containing gallery data and srcs parsed from the expanded shortcode.
Usage
get_post_galleries( $post, $html );
- $post(int|WP_Post) (required)
- Post ID or object.
- $html(true|false)
- Whether to return HTML or data in the array.
Default: true
Examples
#1 Get all the gallery posts 2179
This example shows how the function works. It is assumed that there are 2 galleries in the text of post 2179 - 2 shortcodes [gallery]:
$gal = get_post_galleries(2179, false);
/* $gal will be equal to
Array
(
[0] => Array
(
[ids] => 6790,6789,6788
[src] => Array
(
[0] => http://wp-kama.ru/wp-content/uploads/2016/02/image12-80x80.png
[1] => http://wp-kama.ru/wp-content/uploads/2016/02/image11-80x80.png
[2] => http://wp-kama.ru/wp-content/uploads/2016/02/image10-80x80.png
)
)
[1] => Array
(
[ids] => 6762,6761,6760
[src] => Array
(
[0] => http://wp-kama.ru/wp-content/uploads/2016/02/image008-80x80.jpg
[1] => http://wp-kama.ru/wp-content/uploads/2016/02/image007-80x80.jpg
[2] => http://wp-kama.ru/wp-content/uploads/2016/02/image006-80x80.jpg
)
)
)
*/
$gal = get_post_galleries(25, true);
/*$gal will be equal to
Array
(
[0] => <div id='gallery-3' class='gallery galleryid-19 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image12'><img width="80" height="80" src="/wp-content/uploads/2016/02/image12-80x80.png" class="attachment-thumbnail size-thumbnail" alt="image12" /></a>
</div></figure><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image11'><img width="80" height="80" src="/wp-content/uploads/2016/02/image11-80x80.png" class="attachment-thumbnail size-thumbnail" alt="image11" /></a>
</div></figure><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image10'><img width="80" height="80" src="/wp-content/uploads/2016/02/image10-80x80.png" class="attachment-thumbnail size-thumbnail" alt="image10" /></a>
</div></figure>
</div>
[1] => <div id='gallery-4' class='gallery galleryid-19 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image008'><img width="80" height="80" src="/wp-content/uploads/2016/02/image008-80x80.jpg" class="attachment-thumbnail size-thumbnail" alt="image008" /></a>
</div></figure><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image007'><img width="80" height="80" src="/wp-content/uploads/2016/02/image007-80x80.jpg" class="attachment-thumbnail size-thumbnail" alt="image007" /></a>
</div></figure><figure class='gallery-item'>
<div class='gallery-icon landscape'>
<a href='/article/sajt-na-konstruktore-wix/image006'><img width="80" height="80" src="/wp-content/uploads/2016/02/image006-80x80.jpg" class="attachment-thumbnail size-thumbnail" alt="image006" /></a>
</div></figure>
</div>
)
*/
Changelog
get_post_galleries() get post galleries code
WP 6.6.2
function get_post_galleries( $post, $html = true ) {
$post = get_post( $post );
if ( ! $post ) {
return array();
}
if ( ! has_shortcode( $post->post_content, 'gallery' ) && ! has_block( 'gallery', $post->post_content ) ) {
return array();
}
$galleries = array();
if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER ) ) {
foreach ( $matches as $shortcode ) {
if ( 'gallery' === $shortcode[2] ) {
$srcs = array();
$shortcode_attrs = shortcode_parse_atts( $shortcode[3] );
// Specify the post ID of the gallery we're viewing if the shortcode doesn't reference another post already.
if ( ! isset( $shortcode_attrs['id'] ) ) {
$shortcode[3] .= ' id="' . (int) $post->ID . '"';
}
$gallery = do_shortcode_tag( $shortcode );
if ( $html ) {
$galleries[] = $gallery;
} else {
preg_match_all( '#src=([\'"])(.+?)\1#is', $gallery, $src, PREG_SET_ORDER );
if ( ! empty( $src ) ) {
foreach ( $src as $s ) {
$srcs[] = $s[2];
}
}
$galleries[] = array_merge(
$shortcode_attrs,
array(
'src' => array_values( array_unique( $srcs ) ),
)
);
}
}
}
}
if ( has_block( 'gallery', $post->post_content ) ) {
$post_blocks = parse_blocks( $post->post_content );
while ( $block = array_shift( $post_blocks ) ) {
$has_inner_blocks = ! empty( $block['innerBlocks'] );
// Skip blocks with no blockName and no innerHTML.
if ( ! $block['blockName'] ) {
continue;
}
// Skip non-Gallery blocks.
if ( 'core/gallery' !== $block['blockName'] ) {
// Move inner blocks into the root array before skipping.
if ( $has_inner_blocks ) {
array_push( $post_blocks, ...$block['innerBlocks'] );
}
continue;
}
// New Gallery block format as HTML.
if ( $has_inner_blocks && $html ) {
$block_html = wp_list_pluck( $block['innerBlocks'], 'innerHTML' );
$galleries[] = '<figure>' . implode( ' ', $block_html ) . '</figure>';
continue;
}
$srcs = array();
// New Gallery block format as an array.
if ( $has_inner_blocks ) {
$attrs = wp_list_pluck( $block['innerBlocks'], 'attrs' );
$ids = wp_list_pluck( $attrs, 'id' );
foreach ( $ids as $id ) {
$url = wp_get_attachment_url( $id );
if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
$srcs[] = $url;
}
}
$galleries[] = array(
'ids' => implode( ',', $ids ),
'src' => $srcs,
);
continue;
}
// Old Gallery block format as HTML.
if ( $html ) {
$galleries[] = $block['innerHTML'];
continue;
}
// Old Gallery block format as an array.
$ids = ! empty( $block['attrs']['ids'] ) ? $block['attrs']['ids'] : array();
// If present, use the image IDs from the JSON blob as canonical.
if ( ! empty( $ids ) ) {
foreach ( $ids as $id ) {
$url = wp_get_attachment_url( $id );
if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
$srcs[] = $url;
}
}
$galleries[] = array(
'ids' => implode( ',', $ids ),
'src' => $srcs,
);
continue;
}
// Otherwise, extract srcs from the innerHTML.
preg_match_all( '#src=([\'"])(.+?)\1#is', $block['innerHTML'], $found_srcs, PREG_SET_ORDER );
if ( ! empty( $found_srcs[0] ) ) {
foreach ( $found_srcs as $src ) {
if ( isset( $src[2] ) && ! in_array( $src[2], $srcs, true ) ) {
$srcs[] = $src[2];
}
}
}
$galleries[] = array( 'src' => $srcs );
}
}
/**
* Filters the list of all found galleries in the given post.
*
* @since 3.6.0
*
* @param array $galleries Associative array of all found post galleries.
* @param WP_Post $post Post object.
*/
return apply_filters( 'get_post_galleries', $galleries, $post );
}
Related Functions