WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

has_block() WP 5.0.0

Определяет содержит ли переданная строка или контент переданного поста, указанный блок (редактора блоков, Гунетберга).

Эта проверка оптимизирована для получения наивысшей скорости, а не точности определения блоков, определяется только блок но не его структура. Что бы добиться строгой точности используйте парсер блоков: parse_blocks.

Используйте has_blocks(), чтобы проверить есть ли в строке хоть какой-нибудь блок.

Работает на основе: has_blocks()
1 раз = 0.000001с = скорость света | 50000 раз = 0.02с = скорость света | PHP 7.3.20, WP 5.5.1

Хуков нет.

Возвращает

true/false. В зависимости от того содержит ли содержимое записи указанный блок.

Использование

has_block( $block_name, $post );
$block_name(строка) (обязательный)
Название блока, который нужно найти (определить), то что указывается в HTML комментарии: <!-- wp:block_name -->.
$post(число/строка/WP_Post/null)
Строка или ID поста, или объект поста.
По умолчанию: global $post

Примеры

#1 Содержит ли строка блок галереи

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

//  выведет true
if( has_block( 'gallery', $string ) ){
	// строка содержит блок gallery
}

#2 Содержит ли контент поста блок галереи

// Проверка наличия блока гутенберг в контенте поста
if( has_block('gallery' , 1234 ) ){

	// пост с ID 1234 содержит блок галереи
}

Заметки

  • Смотрите: parse_blocks()

Список изменений

С версии 5.0.0 Введена.

Код has_block() WP 5.5.1

wp-includes/blocks.php
<?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;
}

Cвязанные функции

Из метки: Gutenberg (редактор блоков Гутенберг блоки blocks)

Еще из метки: Условные теги (все)

petrozavodsky 795alkoweb.ru
Делаю веб руками.
Редакторы: Kama 7837
Комментариев нет