Фильтр render_block
в WordPress предоставляет разработчикам возможность модифицировать содержимое любого блока перед его выводом на фронтенде. Это мощный инструмент для кастомизации, позволяющий изменять HTML-структуру и стили блоков без изменения их базового кода.
apply_filters( ‘render_block’, string $block_content, array $block, WP_Block $instance )
Как работает фильтр render_block
Фильтр render_block
применяется к каждому блоку WordPress перед его отображением на фронтенде. Он позволяет изменять HTML-содержимое блока, используя параметры $block_content
и $block
. Также он поддерживает $instance
, объект класса WP_Block
, что дает доступ к расширенной информации о блоке.
Параметры функции
$block_content (string)
: HTML-контент блока.$block (array)
: Массив, содержащий имя блока и его атрибуты.$instance (WP_Block)
: Объект блока, обеспечивающий доступ к дополнительной информации.
Добавление обертки <div>
для блока абзаца
Рассмотрим пример, где мы добавляем div
обертку для блока абзаца (core/paragraph
), чтобы изменить его внешний вид:
// В файле functions.php
function custom_div_wrapper( $block_content, $block ) {
if ($block['blockName'] === 'core/paragraph') {
$block_content = '<div class="custom-wrapper">' . $block_content . '</div>';
}
return $block_content;
}
add_filter('render_block', 'custom_div_wrapper', 10, 2);
Изменение содержимого блока изображения
Изменим отображение блока изображения (core/image), добавив кастомный класс для дополнительных CSS-стилей:
function add_custom_class_to_image_block( $block_content, $block ) {
if ($block['blockName'] === 'core/image') {
return '<div class="image-custom-class">' . $block_content . '</div>';
}
return $block_content;
}
add_filter('render_block', 'add_custom_class_to_image_block', 10, 2);
Использование атрибутов блока для HTML-содержания
Иногда полезно извлекать атрибуты блока для использования их в HTML. Пример ниже изменяет заголовок (core/heading
), добавляя значение атрибута level
как текст перед содержимым:
function prepend_heading_level( $block_content, $block ) {
if ($block['blockName'] === 'core/heading' && isset($block['attrs']['level'])) {
$level = $block['attrs']['level'];
$block_content = '<span class="heading-level">Level: ' . $level . '</span>' . $block_content;
}
return $block_content;
}
add_filter('render_block', 'prepend_heading_level', 10, 2);
Важно: следите за возможностью возврата null значений
$block_content
и$block
, чтобы избежать ошибок в функциях.
Заключение
Фильтр render_block
предоставляет мощные средства для изменения HTML-содержимого блоков WordPress. Используя его, разработчики могут гибко настраивать отображение блоков, добавляя стили и элементы, что позволяет достичь нужного результата без изменения базового исходного кода. Это делает render_block
незаменимым инструментом веб-разработки на платформе WordPress.