I'm working on a design that has different styling if a certain Gutenberg block is present on a page. In other words, if the first block is a custom built Gutenberg block, the post_title is rendered elsewhere due to design choices made.

Is there any function in WordPress to get a list of all Gutenberg blocks present in the post_content?


WordPress 5.0+ has a function for this: parse_blocks(). To see if the first block in the post is the Heading block, you'd do this:

$post = get_post(); 

if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );

    if ( $blocks[0]['blockName'] === 'core/heading' ) {
  • Thanks! I couldn't find this function. Funnily enough my custom code does basically the same thing but with a whole lot less code! Anyhow, marked as accepted as it's the proper built-in function. – Jeffrey von Grumbkow Aug 2 '18 at 11:36
  • 1
    This function has been deprecated (but only renamed), you should use has_blocks($blockName) instead: github.com/WordPress/gutenberg/pull/8631/commits/…. There's also has_block() (without "s"). – Nico Prat Nov 12 '18 at 9:16
  • @NicoPrat we've updated the answer to reflect correct methods – Jeffrey von Grumbkow Dec 10 '18 at 15:24

The solution I'm using as of writing check the post_content for the Gutenberg HTML comments. Due to future Gutenberg changes this might not work in the future.

$post_content = get_the_content( get_the_ID() ); // Get the post_content
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Get all matches in between <!-- /wp: --> strings

// $blocks[1] contains the names of all the blocks present in the post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // Post content contains a wp:heading block
else {
    // Post content does not contain a wp:heading block

As of the release of 5.0 these functions have been deprecated with Gutenberg now integrated into the core. I imagine, but have not confirmed that these functions still exist in the Gutenberg standalone plugin.

Instead of gutenberg_content_has_blocks use has_blocks

Instead of gutenberg_parse_blocks use parse_blocks

  • It would have been nice if you jsut editted the original answer that is still the correct one with just renamed methods. – Jeffrey von Grumbkow Dec 9 '18 at 16:32

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.