Thank you very much for such an elegant solution. My specific case is: I need my gallery block to appear as separate element adjacent to .entry-content so to have a more elegant way to position it outside of the flow of elements that make the article. I either show a featured image there, or if there is a gallery I place the gallery instead.
I solved it like this:
if ( ! has_block( 'gallery' ) ) : get_template_part entry_thumbnail ... else: get_template_part entry_gallery ...
and there simply this:
$blocks = parse_blocks( get_the_content() );
foreach ( $blocks as $block ) {
if ( 'core/gallery' === $block['blockName'] ) {
echo do_shortcode( $block['innerHTML'] );
break;
}
}
And finally in entry_content template part:
$blocks = parse_blocks( get_the_content() );
$content_markup = '';
foreach ( $blocks as $block ) {
if ( 'core/gallery' === $block['blockName'] ) {
continue;
} else {
$content_markup .= render_block( $block );
}
}
$priority = has_filter( 'the_content', 'wpautop' );
if ( false !== $priority ) {
remove_filter( 'the_content', 'wpautop', $priority );
}
echo wp_kses_post( apply_filters( 'the_content', $content_markup ) );
if ( false !== $priority ) {
add_filter( 'the_content', 'wpautop', $priority );
}
Result is exactly what I need, if there is a gallery, show it outside post content, and DO NOT show it also in the post content. Awsome, thank you a LOT for this.