В этом посте мы рассмотрим функцию has_block()
в WordPress, которая используется для проверки наличия определённых блоков Gutenberg в содержимом поста или страницы. Это полезный инструмент для разработчиков тем и плагинов, которые хотят адаптировать отображение или поведение сайта в зависимости от наличия конкретных блоков.
Описание функции
Функция has_block()
проверяет, содержится ли указанный блок в строке или контенте поста/страницы, но не проверяет его валидность.
has_block( $block_name, $post = null )
Параметры:
$block_name
(строка): Название блока, который нужно проверить.$post
(целое число | WP_Post | строка): Можно указать конкретный пост, в котором следует проверить наличие блока. По умолчанию проверяется текущий пост. Также можно передать произвольное строковое значение для проверки.
Возвращаемое значение:
true
илиfalse
в зависимости от наличия указанного блока.
Примеры использования
Рассмотрим несколько примеров использования функции has_block()
.
Применение CSS классов в зависимости от наличия блока
Вы можете изменять стили поста или страницы, если в контенте присутствует определённый блок. Например, добавим CSS класс к посту, если в нём есть блок «Галерея»:
if ( has_block( 'gallery' ) ) {
echo '<div class="has-gallery">';
// Ваш код для вывода поста
echo '</div>';
} else {
echo '<div>';
// Ваш код для вывода поста
echo '</div>';
}
Динамическое создание шорткодов в зависимости от блоков
Иногда может потребоваться создать шорткод, который будет выводить контент в зависимости от наличия определённых блоков:
function my_dynamic_shortcode() {
if ( has_block( 'quote' ) ) {
return '<div class="highlight-quote">Содержит цитату</div>';
} else {
return '<div class="no-quote">Цитата отсутствует</div>';
}
}
add_shortcode( 'dynamic_content', 'my_dynamic_shortcode' );
Публикация уведомлений или предупреждений
Если ваш пост содержит блок «Код», вы можете публиковать предупреждение о содержимом для посетителей:
function check_for_code_block() {
if ( has_block( 'code' ) ) {
echo '<div class="alert alert-warning">Этот пост содержит пример кода. Пожалуйста, убедитесь, что вы понимаете его перед выполнением.</div>';
}
}
add_action( 'the_content', 'check_for_code_block' );
Условное добавление метаданных к посту
Вы можете добавлять метаданные к посту в зависимости от наличия определённого блока. Например, добавим метку «Контент с видео», если в посте есть блок «Видео»:
function add_video_tag_to_post( $post_id ) {
if ( has_block( 'video', get_post( $post_id ) ) ) {
wp_set_post_tags( $post_id, 'Контент с видео', true );
}
}
add_action( 'save_post', 'add_video_tag_to_post' );
Создание пользовательских виджетов
Вы можете создавать пользовательские виджеты, которые отображаются только при наличии определённых блоков в текущем посте:
function register_custom_widget() {
register_sidebar( array(
'name' => 'Custom Widget Area',
'id' => 'custom_widget_area',
'before_widget' => '<div class="widget-content">',
'after_widget' => '</div>',
) );
}
add_action( 'widgets_init', 'register_custom_widget' );
function display_custom_widget() {
if ( has_block( 'image' ) ) {
dynamic_sidebar( 'custom_widget_area' );
}
}
add_action( 'wp_sidebar', 'display_custom_widget' );
Изменение логики кэширования
Вы можете изменить логику кэширования страницы, если она содержит определённые блоки. Например, отключим кэширование для страниц с блоком «Форма»:
function disable_cache_for_form_block() {
if ( has_block( 'form' ) ) {
define( 'DONOTCACHEPAGE', true );
}
}
add_action( 'wp', 'disable_cache_for_form_block' );
Заключение по has_block
Функция has_block()
предоставляет множество возможностей для динамического изменения контента и поведения сайта в зависимости от наличия блоков Gutenberg. Используя приведённые выше примеры, вы можете значительно расширить функциональность вашего сайта и улучшить пользовательский опыт. Экспериментируйте с различными блоками и создавайте уникальные решения для ваших проектов.