Функция `has_block()` в WordPress: синтаксис, возвращаемое значение, примеры использования.

## HAS_BLOCK() │ WP 5.0.0

### Что такое has_block()?

Функция has_block() используется для определения, содержит ли пост или строка определенный тип блока в WordPress. Эта функция ориентирована на производительность, что значит, что она проверяет наличие блока, но не проверяет структуру блока или синхронизированные шаблоны (ранее известные как многоразовые блоки).

Если вам нужна строгая проверка, то для этого лучше использовать парсер блоков на содержимом поста.

**Используется:** has_blocks()

### Возвращаемое значение

true или false. Функция возвращает true, если содержимое поста содержит указанный блок, и false в противном случае.

### Синтаксис

```php
has_block( $block_name, $post );
  • $block_name (string) (обязательный) — Полное имя блока, который необходимо найти.
  • $post (int|string|WP_Post|null) — Содержимое поста, ID поста или объект поста.
    • По умолчанию используется глобальный $post.

Примеры использования

Пример 1: Содержит ли строка блок галереи?

$string = '';

// Печатаем true, если в строке есть блок галереи
if ( has_block( 'gallery', $string ) ) {
    // (строка) содержит блок галереи
}
// Проверяем наличие блока в содержимом поста
if ( has_block('gallery', 1234 ) ) {
    // Пост с ID 1234 содержит блок галереи
}

Важно

  • См. также: parse_blocks()

Изменения

  • С версии 5.0.0 — функция была введена.

Код функции has_block

Реализация функции has_block в файле 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;
        }
    }

    // Нормализуем имя блока, если оно задано без пространства имен
    if ( ! str_contains( $block_name, '/' ) ) {
        $block_name = 'core/' . $block_name;
    }

    // Проверяем наличие блока по полному имени
    $has_block = str_contains( $post, '