Определяет содержит ли переданная строка или контент переданного поста, указанный блок (редактора блоков, Гунетберга).
Эта проверка оптимизирована для получения наивысшей скорости, а не точности определения блоков, определяется только блок но не его структура. Что бы добиться строгой точности используйте парсер блоков: parse_blocks.
Хуков нет.
Возвращает
true/false. В зависимости от того содержит ли содержимое записи указанный блок.
Использование
has_block( $block_name, $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()
Список изменений
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; }