has_block()WP 5.0.0

Determines whether the given string or content of the given post contains the specified block (Gutenberg block editor).

This check is optimized for achieving the highest speed rather than accuracy in block determination; it only identifies the block but not its structure. To achieve strict accuracy, use the block parser: parse_blocks.

Use has_blocks() to check if there is at least one block in the string.

1 time — 0.000001 sec (speed of light) | 50000 times — 0.02 sec (speed of light) | PHP 7.3.20, WP 5.5.1

No Hooks.

Returns

true|false. Depending on whether the content of the post contains the specified block.

Usage

has_block( $block_name, $post );
$block_name(string) (required)
The name of the block to find (identify), as specified in the HTML comment: <!-- wp:block_name -->.
$post(int/string/WP_Post/null)
A string or ID of the post, or a post object.
Default: global $post

Examples

2

#1 Does the post content contain a gallery block

// Checking the presence of the gutenberg block in the post content
if( has_block('gallery' , 1234 ) ){

	// the post with ID 1234 contains a gallery block
}
0

#2 Does (string) contain a gallery block

$string= '<!-- wp:gallery {"ids" : [123, 456, 789 ]} -->';

// print true
if( has_block( 'gallery', $string ) ){
	// (string) contains a gallery block
}

Notes

Changelog

Since 5.0.0 Introduced.

has_block() code WP 7.0

function has_block( $block_name, $post = null ) {
	if ( ! has_blocks( $post ) ) {
		return false;
	}

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

	/*
	 * Normalize block name to include namespace, if provided as non-namespaced.
	 * This matches behavior for WordPress 5.0.0 - 5.3.0 in matching blocks by
	 * their serialized names.
	 */
	if ( ! str_contains( $block_name, '/' ) ) {
		$block_name = 'core/' . $block_name;
	}

	// Test for existence of block by its fully qualified name.
	$has_block = str_contains( $post, '<!-- wp:' . $block_name . ' ' );

	if ( ! $has_block ) {
		/*
		 * If the given block name would serialize to a different name, test for
		 * existence by the serialized form.
		 */
		$serialized_block_name = strip_core_block_namespace( $block_name );
		if ( $serialized_block_name !== $block_name ) {
			$has_block = str_contains( $post, '<!-- wp:' . $serialized_block_name . ' ' );
		}
	}

	return $has_block;
}