has_blocks( int|string|WP_Post|null $post = null )

Determines whether a post or content string has blocks.


Description

This test optimizes for performance rather than strict accuracy, detecting the pattern of a block but not validating its structure. For strict accuracy, you should use the block parser on post content.

Top ↑

See also


Top ↑

Parameters

$post

(int|string|WP_Post|null) (Optional) Post content, post ID, or post object. Defaults to global $post.

Default value: null


Top ↑

Return

(bool) Whether the post has blocks.


Top ↑

Source

File: wp-includes/blocks.php

function has_blocks( $post = null ) {
	if ( ! is_string( $post ) ) {
		$wp_post = get_post( $post );
		if ( $wp_post instanceof WP_Post ) {
			$post = $wp_post->post_content;
		}
	}

	return false !== strpos( (string) $post, '<!-- wp:' );
}


Top ↑

Changelog

Changelog
Version Description
5.0.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 2 content
    Contributed by Ankit Gade

    1. We can use this function to pass a flag to indicate if content has blocks when we have decoupled environment, where WP is backend and frontend is implemented in some other language.

    2. We can convert (parse) block output as per our requirement and pass it in the API. While, converting it can be useful to check if the content has any block. This will let us pass content efficiently by implementing parsing when it is necessary.

    class WPDocs_Custom_Block_Parse {
    
    	function parse() {
    		// Do something
      	}
    }
    
    function wpdocs_custom_block_parser() {
    	return 'WPDocs_Custom_Block_Parse';
    }
    
    /**
     * In the implementation check if content has block
     */
    if ( has_blocks( $post_content ) ) {
    	add_filter( 'block_parser_class', 'wpdocs_custom_block_parser' );
    	$response_content = parse_blocks( $content );
    	remove_filter( 'block_parser_class', 'wpdocs_custom_block_parser' );
    }
    

You must log in before being able to contribute a note or feedback.