has_blocks

The timeline below displays how wordpress function has_blocks has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Determines whether a post or content string has blocks.
 *
 * 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.
 *
 * @since 5.0.0
 *
 * @see parse_blocks()
 *
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object.
 *                                      Defaults to global $post.
 * @return bool Whether the post has blocks.
 */
function has_blocks($post = null)
{
    if (!is_string($post)) {
        $wp_post = get_post($post);
        if (!$wp_post instanceof WP_Post) {
            return false;
        }
        $post = $wp_post->post_content;
    }
    return str_contains((string) $post, '<!-- wp:');
}

WordPress Version: 6.1

/**
 * Determines whether a post or content string has blocks.
 *
 * 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.
 *
 * @since 5.0.0
 *
 * @see parse_blocks()
 *
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object.
 *                                      Defaults to global $post.
 * @return bool Whether the post has blocks.
 */
function has_blocks($post = null)
{
    if (!is_string($post)) {
        $wp_post = get_post($post);
        if (!$wp_post instanceof WP_Post) {
            return false;
        }
        $post = $wp_post->post_content;
    }
    return false !== strpos((string) $post, '<!-- wp:');
}

WordPress Version: 5.8

/**
 * Determine whether a post or content string has blocks.
 *
 * 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.
 *
 * @since 5.0.0
 *
 * @see parse_blocks()
 *
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object.
 *                                      Defaults to global $post.
 * @return bool Whether the post has blocks.
 */
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:');
}

WordPress Version: 5.5

/**
 * Determine whether a post or content string has blocks.
 *
 * 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.
 *
 * @since 5.0.0
 *
 * @see parse_blocks()
 *
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post.
 * @return bool Whether the post has blocks.
 */
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:');
}

WordPress Version: 5.0

/**
 * Determine whether a post or content string has blocks.
 *
 * 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.
 *
 * @since 5.0.0
 * @see parse_blocks()
 *
 * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post.
 * @return bool Whether the post has blocks.
 */
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:');
}