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

Приклади

0

#1 Чи містить рядок блок галереї

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

// виведе true
if( has_block( 'gallery', $string ) ){
	// рядок містить блок галереї
}
0

#2 Чи містить контент поста блок галереї

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

	// пост з ID 1234 містить блок галереї
}

нотатки

список змін

З версії 5.0.0Введено.

Код has_block() WP 6.0.2

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 включно з namespace, якщо передбачена як не-namespaced.
	 * Цей матч behavior for WordPress 5.0.0 - 5.3.0 in matching blocks by
	 * їх послідовні назви.
	 */
	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 ) {
		/*
		 * Якщо 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;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *