Когда речь заходит о кастомизации блоков в WordPress, использование хука render_block_{$this->name}
открывает обширные возможности. Этот хук позволяет разработчикам фильтровать и изменять HTML-контент блоков перед его выводом на странице, что может быть особенно полезным для настройки дизайна или поведения контента.
apply_filters( “render_block_{$this->name}”, string $block_content, array $block, WP_Block $instance )
Что такое render_block_{$this->name}?
render_block_{$this->name}
— это динамический фильтр WordPress, который применяется к содержимому блока после его рендеринга в HTML. Здесь {$this->name}
подставляется с именем блока, например, core/paragraph
. Он предоставляет три параметра: $block_content
(строка, отвечающая за содержимое блока), $block
(массив с полными данными блока) и $instance
(экземпляр объекта WP_Block
).
Практическое применение фильтра: добавление класса к блоку
Давайте добавим специфический класс CSS ко всем блочным цитатам (core/quote
). Это позволит стилизовать их особыми стилями для различного отображения.
add_filter( 'render_block_core/quote', 'custom_quote_class', 10, 2 );
function custom_quote_class( $block_content, $block ) {
$processor = new WP_HTML_Tag_Processor( $block_content );
if ( $processor->next_tag( 'blockquote' ) ) {
$processor->add_class( 'custom-quote' );
}
return $processor->get_updated_html();
}
Добавление кастомного контента в блок изображений
Рассмотрим пример, в котором необходимо внедрить сообщение перед блоком изображения с функцией Expand on Click. Для доступа к lightbox-разметке важно установить приоритет не менее 16:
add_filter( 'render_block_core/image', 'add_custom_content_to_image', 16, 2 );
function add_custom_content_to_image( $block_content, $block ) {
if ( isset( $block['attrs']['expandOnClick'] ) && $block['attrs']['expandOnClick'] ) {
$custom_notice = '<div class="notice">Click to view full image!</div>';
$block_content = $custom_notice . $block_content;
}
return $block_content;
}
Условная модификация меню навигации
В этом примере мы добавим приветственное сообщение для администраторов в блоке меню навигации:
add_filter( 'render_block_core/navigation', 'prepend_admin_message', 10, 2 );
function prepend_admin_message( $block_content, $block ) {
if ( is_user_logged_in() && current_user_can( 'administrator' ) ) {
$admin_message = '<span class="admin-welcome">Welcome, Admin!</span>';
$block_content = $admin_message . $block_content;
}
return $block_content;
}
Важно: При изменении блоков WordPress, помните о стандартных практиках безопасности и учитывайте, что ваши изменения могут повлиять на другие хуки и фильтры.
Заключение
Хук render_block_{$this->name}
позволяет гибко кастомизировать блоки в WordPress, добавляя специфические стили или дополнительные элементы к их содержимому. Это мощный инструмент, который предоставляет разработчикам возможность изменения поведения блоков без изменения их оригинального кода.