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