I have a site where I created a page that takes the gallery images from a post and puts them into a slider.
I used the following code:
// gets the gallery info
$gallery = get_post_gallery( $post->ID, false );
// makes an array of image ids
$ids = explode ( ",", $gallery['ids'] );
Then I inserted the images using wp_get_attachment_image().
Unfortunately, with WP 5.0 and Gutenberg, get_post_gallery no longer works with newly added content. It seems that get_post_gallery used a shortcode that no longer works with Gutenberg.
I am still getting up to speed on Gutenberg and the block system. Until I understand that all better, I was wondering if anyone has any advice on how to get the image ids from a gallery in Gutenberg?
I have a site where I created a page that takes the gallery images from a post and puts them into a slider.
I used the following code:
// gets the gallery info
$gallery = get_post_gallery( $post->ID, false );
// makes an array of image ids
$ids = explode ( ",", $gallery['ids'] );
Then I inserted the images using wp_get_attachment_image().
Unfortunately, with WP 5.0 and Gutenberg, get_post_gallery no longer works with newly added content. It seems that get_post_gallery used a shortcode that no longer works with Gutenberg.
I am still getting up to speed on Gutenberg and the block system. Until I understand that all better, I was wondering if anyone has any advice on how to get the image ids from a gallery in Gutenberg?
Using birgire's suggestions, I came up with the following solution that is working well with both the old pre-WP 4.x data and the newer posts that have been added under 5.0.
// if there is a gallery block do this
if (has_block('gallery', $post->post_content)) {
$post_blocks = parse_blocks($post->post_content);
$ids = $post_blocks[0][attrs][ids];
}
// if there is not a gallery block do this
else {
// gets the gallery info
$gallery = get_post_gallery( $post->ID, false );
// makes an array of image ids
$ids = explode ( ",", $gallery['ids'] );
}
The get_post_gallery()
is a wrapper for get_post_galleries()
that has an open ticket
#43826 for gallery blocks support. This is currently set to the 5.1 milestone, but it might change.
You can even look at the proposed patches, that uses e.g. parse_blocks( $post->post_content )
and has_block( 'gallery', $post->post_content )
, to get an idea what's needed to fully support this.
In the meanwhile you could look into the render_block
filter to modify the rendered output of gallery blocks to your needs.
Here's an example that targets the core/gallery
block and uses the block attribute containing the gallery image IDs:
/**
* Modify the output of the rendered core/gallery block.
*/
add_filter( 'render_block', function( $block_content, $block ) {
if ( 'core/gallery' !== $block['blockName'] || ! isset( $block['attrs']['ids'] ) ) {
return $block_content;
}
$li = '';
foreach( (array) $block['attrs']['ids'] as $id ) {
$li .= sprintf( '<li>%s</li>', wp_get_attachment_image( $id, 'large' ) );
}
return sprintf( '<ul>%s</ul>', $li );
}, 10, 2 );