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();
		}`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment