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 );
@dimative

This comment has been minimized.

Copy link

dimative commented Jan 22, 2019

Hello. How can i use this snippet?

@dimative

This comment has been minimized.

Copy link

dimative 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.

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.