pre_render_block
Позволяет заменить HTML блока до его рендеринга или полностью отключить его вывод.
Фильтр вызывается в render_block(), а также при обработке вложенных блоков в WP_Block::render(). Подходит для статических и динамических блоков.
При подмене результата пропускается обычный рендеринг самого блока и дочерних блоков.
Для заменённого блока не вызываются render_callback и фильтры render_block_data, render_block_context, render_block и render_block_(name).
Также пропускается подключение ресурсов этого блока. Если подставляемому HTML нужны стили или скрипты, позаботьтесь об их подключении.
Для изменения готового HTML используйте render_block или render_block_(name).
Для изменения атрибутов перед рендерингом используйте render_block_data.
Использование
add_filter( 'pre_render_block', 'wp_kama_pre_render_block_filter', 10, 3 );
/**
* Function for `pre_render_block` filter-hook.
*
* @param string|null $pre_render The pre-rendered content.
* @param array $parsed_block An associative array of the block being rendered. See
* WP_Block_Parser_Block.
* @param WP_Block|null $parent_block If this is a nested block, a reference to the parent block.
*
* @return string|null
*/
function wp_kama_pre_render_block_filter( $pre_render, $parsed_block, $parent_block ){
// filter...
return $pre_render;
}
- $pre_render(строка|null)
HTML, который нужно использовать вместо результата рендеринга.
null- продолжить обычный рендеринг.- Строка - заменить результат указанным HTML.
- Пустая строка
''- убрать блок из вывода.
По умолчанию:
null.Если менять блок не нужно, возвращайте полученное
$pre_render, чтобы сохранить результат предыдущих обработчиков.WordPress проверяет значение строго на
null: любое другое значение прерывает рендеринг. Для отключения вывода используйте'', а неfalse.- $parsed_block(массив)
Данные обрабатываемого блока после разбора разметки.
-
blockName(строка|null)
Имя блока, напримерcore/paragraph. Для свободного HTML вне блоков может бытьnull. -
attrs(массив)
Атрибуты из HTML-комментария блока. Это не полный набор атрибутов: значения, извлекаемые из HTML, здесь могут отсутствовать. -
innerBlocks(массив массивов)
Вложенные блоки. Каждый элемент имеет такую же структуру, как$parsed_block. -
innerHTML(строка)
HTML внутри блока без HTML вложенных блоков. - innerContent(массив)
Фрагменты HTML и значенияnull, обозначающие места вставки вложенных блоков.
-
- $parent_block(WP_Block|null)
Объект родительского блока при обработке вложенного блока в WP_Block::render().
При вызове фильтра из render_block() всегда передаётся
null.
Примеры
#1 Отключить вывод блока последних записей
Блок core/latest-posts не будет рендериться, поэтому его callback не выполнит запрос записей.
add_filter( 'pre_render_block', 'my_disable_latest_posts_block', 10, 2 );
function my_disable_latest_posts_block( $pre_render, $parsed_block ) {
if ( null !== $pre_render ) {
return $pre_render;
}
if ( 'core/latest-posts' === $parsed_block['blockName'] ) {
return '';
}
return $pre_render;
}
#2 Заменить блок собственным HTML
В настройках блока «Абзац» укажем дополнительный CSS-класс current-year. При выводе заменим такой блок абзацем с текущим годом.
add_filter( 'pre_render_block', 'my_render_current_year', 10, 2 );
function my_render_current_year( $pre_render, $parsed_block ) {
if ( null !== $pre_render || 'core/paragraph' !== $parsed_block['blockName'] ) {
return $pre_render;
}
$classes = preg_split( '/\s+/', $parsed_block['attrs']['className'] ?? '' );
if ( ! in_array( 'current-year', $classes, true ) ) {
return $pre_render;
}
return '<p class="current-year">' . esc_html( wp_date( 'Y' ) ) . '</p>';
}
Исходный HTML абзаца и его оформление полностью заменяются указанной разметкой.
Список изменений
| С версии 5.1.0 | Введена. |
| С версии 5.9.0 | The $parent_block parameter was added. |
Где вызывается хук
$pre_render = apply_filters( 'pre_render_block', null, $parsed_block, $parent_block );
$pre_render = apply_filters( 'pre_render_block', null, $inner_block->parsed_block, $parent_block );
Где используется хук в WordPress
add_filter( 'pre_render_block', '_wp_add_block_level_preset_styles', 10, 2 );