Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Make WordPress function Get_Post_Gallery work for Gutenberg powered sites.
<?php
/**
* Plugin Name: Get Post Gallery Polyfill
* Plugin URI: https://prothemedesign.com
* Description: Make Get_Post_Gallery work for Gutenberg powered sites.
* Author: Ben Gillbanks
* Version: 1.0
* Author URI: https://prothemedesign.com
*
* @package ptd
*/
/**
* A get_post_gallery() polyfill for Gutenberg
*
* @param string $gallery The current gallery html that may have already been found (through shortcodes).
* @param int $post The post id.
* @return string The gallery html.
*/
function bm_get_post_gallery( $gallery, $post ) {
// Already found a gallery so lets quit.
if ( $gallery ) {
return $gallery;
}
// Check the post exists.
$post = get_post( $post );
if ( ! $post ) {
return $gallery;
}
// Not using Gutenberg so let's quit.
if ( ! function_exists( 'has_blocks' ) ) {
return $gallery;
}
// Not using blocks so let's quit.
if ( ! has_blocks( $post->post_content ) ) {
return $gallery;
}
/**
* Search for gallery blocks and then, if found, return the html from the
* first gallery block.
*
* Thanks to Gabor for help with the regex:
* https://twitter.com/javorszky/status/1043785500564381696.
*/
$pattern = "/<!--\ wp:gallery.*-->([\s\S]*?)<!--\ \/wp:gallery -->/i";
preg_match_all( $pattern, $post->post_content, $the_galleries );
// Check a gallery was found and if so change the gallery html.
if ( ! empty( $the_galleries[1] ) ) {
$gallery = reset( $the_galleries[1] );
}
return $gallery;
}
add_filter( 'get_post_gallery', 'bm_get_post_gallery', 10, 2 );
@ulziibat-n

This comment has been minimized.

Copy link

ulziibat-n commented Jan 22, 2019

Hello. How can i use this snippet?

@ulziibat-n

This comment has been minimized.

Copy link

ulziibat-n commented Jan 22, 2019

Can i use it like this
`/**
* Retrieve the first gallery in the post
*/
$prefix_gallery = get_post_gallery( $post->ID, false );

		if ( $prefix_gallery ) {
			echo '<div class="swiper-container"><div class="swiper-wrapper">';
			if ( is_array( $prefix_gallery ) ) {
				foreach ( $prefix_gallery['src'] as $prefix_gallery_image_url ) {
					echo '<div class="swiper-slide"><img src="' . esc_url( $prefix_gallery_image_url ) . '"></div>';
				}
			}
			echo '</div></div>';
		} else {
			prefix_post_thumbnail();
		}`
@BinaryMoon

This comment has been minimized.

Copy link
Owner Author

BinaryMoon commented Dec 5, 2019

Yep - you use get_post_gallery as normal and this code will do its thing.

@kenpoc4

This comment has been minimized.

Copy link

kenpoc4 commented May 12, 2020

Hi, very good your plugin, but if you want to get the id of the gallery images, just return: string (1) "".
Is there any specific way to get the IDs?

@BinaryMoon

This comment has been minimized.

Copy link
Owner Author

BinaryMoon commented May 12, 2020

I'm afraid I don't have a solution for that. This grabs the html for the gallery, and doesn't get the gallery info. There's probably another regex you could use that would get that information but I don't know what it is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.