parse_blocks()
Разбирает указанную строку с Gutenberg-разметкой и парсит её в массив данных блоков.
Функция строит дерево по спецификации WP_Block_Parser_Block: у каждого узла есть blockName, attrs, innerBlocks, innerHTML и innerContent. Вложенные блоки лежат в innerBlocks.
Полезна при написании миграций контента, REST-эндпойнтов и при поиске/замене блоков в БД.
В отличие от do_blocks() и render_block(), не выводит готовый HTML и не вызывает render_callback динамических блоков.
Используйте has_blocks() / has_block(), если нужно просто проверить наличие блоков. Они быстрее.
Используйте serialize_blocks() или traverse_and_serialize_blocks(), чтобы снова получить строку из данных блоков.
Хуки из функции
Возвращает
Массив[]. Данные по разобранным блокам.
Использование
parse_blocks( $content );
- $content(строка) (обязательный)
- Контент, который нужно распарсить. Сырый контент в блок-нотации Gutenberg
<!-- wp:... -->.
Примеры
#1 Пример возвращаемых данных
Пусть у нас следующего вида контент:
<!-- wp:gallery {"ids":[11]} -->
<figure class="wp-block-gallery columns-1 is-cropped">
<ul class="blocks-gallery-grid">
<li class="blocks-gallery-item">
<figure>
<img src="https://wp-test.ru/wp-content/uploads/2020/05/2020-landscape-1-1024x656.png" alt=""
data-id="11"
data-full-url="https://wp-test.ru/wp-content/uploads/2020/05/2020-landscape-1.png"
data-link="https://wp-test.ru/my-super-image/"
class="wp-image-11"/>
</figure>
</li>
</ul>
</figure>
<!-- /wp:gallery -->
<!-- wp:cover {"overlayColor":"luminous-vivid-amber"} -->
<div class="wp-block-cover has-luminous-vivid-amber-background-color has-background-dim">
<div class="wp-block-cover__inner-container">
<!-- wp:paragraph {"align":"center","placeholder":"Введите заголовок...","fontSize":"large"} -->
<p class="has-text-align-center has-large-font-size">Супер заголовок блока!</p>
<!-- /wp:paragraph -->
</div>
</div>
<!-- /wp:cover -->
<!-- wp:paragraph -->
<p>Обычный параграф с текстом</p>
<!-- /wp:paragraph -->
Пропустим данный контент через функцию
$parse_content = parse_blocks( $content ); print_r( $parse_content );
Функция вернёт следующий результат:
Список изменений
| С версии 5.0.0 | Введена. |
Код parse_blocks() parse blocks WP 6.8.3
function parse_blocks( $content ) {
/**
* Filter to allow plugins to replace the server-side block parser.
*
* @since 5.0.0
*
* @param string $parser_class Name of block parser class.
*/
$parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' );
$parser = new $parser_class();
return $parser->parse( $content );
}