Parses blocks out of a content string.
Description
Given an HTML document, this function fully-parses block content, producing a tree of blocks and their contents, as well as top-level non-block content, which will appear as a block with no blockName.
This function can be memory heavy for certain documents, particularly those with deeply-nested blocks or blocks with extensive attribute values. Further, this function must parse an entire document in one atomic operation.
If the entire parsed document is not necessary, consider using WP_Block_Processor instead, as it provides a streaming and low-overhead interface for finding blocks.
Parameters
$contentstringrequired- Post content.
Source
function parse_blocks( $content ) {
/**
* Filter to allow plugins to replace the server-side block parser.
*
* @since 5.0.0
*
* @param string $parser_class Name of block parser class.
*/
$parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' );
$parser = new $parser_class();
return $parser->parse( $content );
}
Hooks
- apply_filters( ‘block_parser_class’,
string $parser_class ) Filter to allow plugins to replace the server-side block parser.
Changelog
| Version | Description |
|---|---|
| 5.0.0 | Introduced. |
Example using
parse_blocks()to display a block from a postPlace within The Loop
If used in The Loop it renders the first YouTube video embedded within a post. Can be used with other blocks by assigning their blockName.
Use serialize_blocks() to convert the parsed block back to content.
Example of returned array for a Paragraph block:
As of Gutenberg 7.7, for this input:
the output of
parse_blockswill be:In case you wish to check if current post content is Gutenberg-blocks or using Classic editor:
If post content is Classic Editor, it has only one block, but
blockNameis empty.$fullContent = get_the_content( $pid ); if ( has_blocks( $fullContent ) ) { doit(); }orif ( has_blocks( $post ) ) { doit(); }