render_block_(name)
Позволяет изменить HTML указанного блока после его рендеринга.
Вместо (name) указывается полное имя блока с пространством имён:
render_block_core/paragraph- абзац.render_block_core/image- изображение.render_block_core/group- группа.render_block_my-plugin/example- пользовательский блок.
Фильтр вызывается в WP_Block::render() после общего фильтра render_block. Работает для статических и динамических блоков, включая вложенные. Изменяет вывод, но не сохранённый контент записи.
Если рендеринг блока прерван через pre_render_block, этот фильтр для него не вызывается.
Для обработки всех типов блоков используйте render_block. Для замены результата до рендеринга используйте pre_render_block.
Использование
add_filter( 'render_block_(name)', 'wp_kama_render_block_name_filter', 10, 3 );
/**
* Function for `render_block_(name)` filter-hook.
*
* @param string $block_content The block content.
* @param array $block The full block, including name and attributes.
* @param WP_Block $instance The block instance.
*
* @return string
*/
function wp_kama_render_block_name_filter( $block_content, $block, $instance ){
// filter...
return $block_content;
}
- $block_content(строка)
HTML блока после рендеринга и обработки предыдущими фильтрами.
Верните изменённый HTML или исходное значение. Пустая строка
''уберёт блок из вывода, но сам рендеринг к этому моменту уже выполнен.- $block(массив)
Данные блока.
-
blockName(строка)
Полное имя блока, напримерcore/image. -
attrs(массив)
Атрибуты блока из его HTML-комментария. Атрибуты, извлекаемые из HTML, могут отсутствовать. -
innerBlocks(массив массивов)
Вложенные блоки с такой же структурой данных. -
innerHTML(строка)
Исходный HTML блока без HTML вложенных блоков. Не равнозначен готовому$block_content. - innerContent(массив)
Фрагменты HTML и значенияnullна местах вложенных блоков.
-
- $instance(WP_Block)
- Текущий объект WP_Block{}.
Примеры
#1 Добавить CSS-класс всем блокам «Абзац»
Используем WP_HTML_Tag_Processor{}, чтобы добавить класс к тегу <p>, сохранив остальные атрибуты.
add_filter( 'render_block_core/paragraph', 'my_add_paragraph_class' );
function my_add_paragraph_class( $block_content ) {
$processor = new WP_HTML_Tag_Processor( $block_content );
if ( $processor->next_tag( 'P' ) ) {
$processor->add_class( 'custom-paragraph' );
}
return $processor->get_updated_html();
}
#2 Добавить обёртку изображению с определённым размером
Проверим атрибут sizeSlug и обернём изображения размера large в дополнительный контейнер.
add_filter( 'render_block_core/image', 'my_wrap_large_image', 20, 2 );
function my_wrap_large_image( $block_content, $block ) {
if ( '' === trim( $block_content ) ) {
return $block_content;
}
if ( 'large' !== ( $block['attrs']['sizeSlug'] ?? '' ) ) {
return $block_content;
}
return '<div class="large-image-wrapper">' . $block_content . '</div>';
}
Проверять $block['blockName'] здесь не нужно: обработчик вызывается только для core/image.
Список изменений
| С версии 5.7.0 | Введена. |
| С версии 5.9.0 | The $instance parameter was added. |
Где вызывается хук
$block_content = apply_filters( "render_block_{$this->name}", $block_content, $this->parsed_block, $this );
Где используется хук в WordPress
add_filter( 'render_block_data', 'wp_render_block_style_variation_support_styles', 10, 2 );
add_filter( 'render_block_data', 'wp_render_custom_css_support_styles', 10, 1 );
add_filter( 'render_block_core/image', array( 'WP_Duotone', 'restore_image_outer_container' ), 10, 1 );
add_filter( 'render_block_data', 'wp_render_elements_support_styles', 10, 1 );
add_filter( 'render_block_data', 'wp_add_parent_layout_to_parsed_block', 10, 3 );
add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 );
add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );
add_filter( 'render_block_context', $filter_block_context, 1 );
remove_filter( 'render_block_context', $filter_block_context, 1 );
add_filter( 'render_block_core/details', 'block_core_details_set_img_fetchpriority_low', 10, 2 );
add_filter( 'render_block_data', 'block_core_gallery_data_id_backcompatibility' );
add_filter( 'render_block_context', 'block_core_gallery_render_context', 10, 2 );
add_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15, 3 );
remove_filter( 'render_block_core/image', 'block_core_image_render_lightbox', 15 );
add_filter( 'render_block_data', 'block_core_latest_posts_migrate_categories' );
add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
add_filter( 'render_block_core/paragraph', 'block_core_paragraph_add_class' );
add_filter( 'render_block_context', $filter_block_context, 1 );
remove_filter( 'render_block_context', $filter_block_context, 1 );
remove_filter( 'render_block_core/query', $render_query_callback );
add_filter( 'render_block_core/query', $render_query_callback, 10, 2 );
add_filter( 'render_block_data', 'block_core_query_disable_enhanced_pagination', 10, 1 );
add_filter( 'render_block_context', 'block_core_tabs_provide_context', 10, 2 );
remove_filter( 'render_block_context', $filter_block_context, 1 );
add_filter( 'render_block_context', $filter_block_context, 1 );
add_filter( 'render_block_context', '_block_template_render_without_post_block_context' );