Функция wp_widgets_access_body_class()
в WordPress позволяет добавлять пользовательские классы к тегу <body>
в зависимости от активных виджетов. Это улучшает гибкость кастомизации тем и позволяет адаптировать внешний вид страницы в зависимости от виджетов, активных в различных областях сайта.
wp_widgets_access_body_class( string $classes ): string
Параметры
Функция принимает следующие параметры:
$classes
(строка или массив) — Существующие классы, которые нужно дополнить.
Возвращаемое Значение
Функция возвращает обновленный массив классов для <body>
, позволяя добавлять дополнительные стили или скрипты в зависимости от активных виджетов на странице.
Пример 1: Добавление Классов к Body для Определенного Виджета
В этом примере добавляется класс has-custom-widget
к <body>
, если активен определенный виджет.
add_filter('body_class', 'custom_body_class_based_on_widget');
function custom_body_class_based_on_widget($classes) {
if ( is_active_widget( false, false, 'custom_widget_id', true ) ) {
$classes[] = 'has-custom-widget';
}
return array_merge($classes, wp_widgets_access_body_class($classes));
}
Здесь, если виджет с ID custom_widget_id
активен, к <body>
будет добавлен класс has-custom-widget
, что можно использовать для дополнительных стилей.
Пример 2: Условные Классы на Основе Активного Сайдбара
Этот пример добавляет класс has-sidebar
к <body>
, если активна область виджетов с ID sidebar-1
:
add_filter('body_class', 'sidebar_body_class');
function sidebar_body_class($classes) {
if ( is_active_sidebar('sidebar-1') ) {
$classes[] = 'has-sidebar';
}
return array_merge($classes, wp_widgets_access_body_class($classes));
}
Этот код проверяет, активен ли сайдбар sidebar-1
. Если да, то класс has-sidebar
добавляется к <body>
, позволяя стилизовать страницы с сайдбаром.
Пример 3: Добавление Классов на Основе Настроек Виджета
В следующем примере проверяется настройка виджета, и, если включена кастомная опция, к <body>
добавляется класс custom-widget-active
:
add_filter('body_class', 'widget_settings_body_class');
function widget_settings_body_class($classes) {
add_filter('wp_widgets_access_body_class', function($classes, $widget, $instance) {
if ( isset($instance['custom_setting']) && $instance['custom_setting'] ) {
$classes[] = 'custom-widget-active';
}
return $classes;
}, 10, 3);
return wp_widgets_access_body_class($classes);
}
Здесь при включенной настройке custom_setting
к <body>
добавляется класс custom-widget-active
, что позволяет применять к виджету стили в зависимости от его настроек.
Добавление Виджетных Классов через body_class
Чтобы применить классы к <body>
, рекомендуется использовать фильтр body_class
. Ниже пример того, как можно объединить кастомные классы с существующими классами для <body>
.
add_filter('body_class', 'add_widget_classes_to_body');
function add_widget_classes_to_body($classes) {
// Добавление классов от `wp_widgets_access_body_class`
return array_merge($classes, wp_widgets_access_body_class($classes));
}
Этот код добавляет к <body>
классы, возвращенные wp_widgets_access_body_class()
, объединяя их с уже существующими классами.
Заключение
Функция wp_widgets_access_body_class()
предоставляет разработчикам WordPress гибкость в добавлении кастомных классов к <body>
на основе состояния виджетов. Это особенно полезно для создания адаптивного дизайна, где внешний вид сайта зависит от активных виджетов.