WordPress at Your Fingertips

has_block() WP 1.0

Determine whether a $post or a string contains a specific block type.

This test optimizes for performance rather than strict accuracy, detecting whether the block type exists but not validating its structure and not checking reusable blocks. For strict accuracy, you should use the block parser on post content.

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.

Return

true|false. Whether the post content contains the specified block.

Usage

has_block( $block_name, $post );
$block_name(string) (required)
Full block type to look for.
$post(int|string|WP_Post|null)
Post content, post ID, or post object.
Default: global $post

Notes

Changelog

Since 5.0.0 Introduced.

Code of has_block() WP 5.8.1

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 ( false === strpos( $block_name, '/' ) ) {
		$block_name = 'core/' . $block_name;
	}

	// Test for existence of block by its fully qualified name.
	$has_block = false !== strpos( $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 = false !== strpos( $post, '<!-- wp:' . $serialized_block_name . ' ' );
		}
	}

	return $has_block;
}

Gutenberg (blocks editor)

Conditional tags (all)

No comments
    Log In