has_block

Advertisement

Summery Summery

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

Syntax Syntax

has_block( string $block_name, int|string|WP_Post|null $post = null )

Description Description

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

Parameters Parameters

$block_name

(Required) Full Block type to look for.

$post

(Optional) Post content, post ID, or post object. Defaults to global $post.

Default value: null

Return Return

(bool) Whether the post content contains the specified block.

Source Source

File: wp-includes/blocks.php

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;
}

Advertisement

Changelog Changelog

Changelog
Version Description
5.0.0 Introduced.

See also See also

Advertisement

Leave a Reply