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 ulziibat-n commented Jan 22, 2019

Hello. How can i use this snippet?

@ulziibat-n

This comment has been minimized.

Copy link

@ulziibat-n 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 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 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 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.