## Функция IS_ACTIVE_WIDGET() │ WP 2.2.0
Функция is_active_widget() используется для проверки, отображается ли виджет на сайте. С её помощью вы можете узнать, активен ли какой-либо виджет в одном из сайдбаров (боковых панелей) вашего WordPress-сайта.
### Аргументы функции
Вы можете использовать либо $callback, либо $id_base. $id_base — это первый аргумент, когда вы расширяете класс WP_Widget. Если не указывать параметр $widget_id, функция ��ернёт ID первого сайдбара, в котором находится первый экземпляр виджета с заданным $callback или $id_base. Если вы укажете параметр $widget_id, функция вернёт ID сайдбара, где виджет с этим $callback/$id_base и указанным ID найден.
**Важно:** Параметры $widget_id и $id_base одинаковы для одиночных виджетов. Для корректной работы функция должна выполняться после инициализации виджетов, то есть после действия init.
### Возвращаемые значения
Функция возвращает:
- **Строку** с ID сайдбара, в котором виджет активен.
- **false**, если виджет не активен.
### Использование функции
```php
is_active_widget( $callback, $widget_id, $id_base, $skip_inactive );
- $callback (callable|false): колбэк виджета для проверки. По умолчанию — false.
- $widget_id (string|false): ID виджета. Этот параметр необязателен, но нужен для проверки. По умолчанию — false.
- $id_base (string|false): базовый ID виджета, созданного с помощью расширения
WP_Widget. По умолчанию — false. - $skip_inactive (true|false): указывает, нужно ли проверять среди неактивных виджетов (
wp_inactive_widgets). По умолчанию — true.
Примеры использования
Пример 1: Проверка, активен ли виджет "Календарь"
$sidebar_id = is_active_widget( 0, 0, 'calendar' );
if ( $sidebar_id ) {
echo 'Сейчас активен виджет Календаря.';
}
Пример 2: Поиск в неактивных виджетах
Предположим, у нас есть виджет "Текст", который не находится в любом сайдбаре и лежит в неактивной области в админ-панели.
$sidebar_id = is_active_widget( 0, 0, 'text', 0 );
echo $sidebar_id; // wp_inactive_widgets
Пример 3: Загружать скрипт только если виджет активен
add_action( 'wp_enqueue_scripts', function() {
if ( is_active_widget( false, false, $id_base, true ) ) {
wp_enqueue_script( 'jquery' );
}
} );
Важные заметки
- Глобальная переменная:
$wp_registered_widgets– массив зарегистрированных виджетов.
Изменения
Функция была добавлена в WordPress с версии 2.2.0.
Код функции
Вот как выглядит сама функция:
function is_active_widget( $callback = false, $widget_id = false, $id_base = false, $skip_inactive = true ) {
global $wp_registered_widgets;
$sidebars_widgets = wp_get_sidebars_widgets();
if ( is_array( $sidebars_widgets ) ) {
foreach ( $sidebars_widgets as $sidebar => $widgets ) {
if ( $skip_inactive && ( 'wp_inactive_widgets' === $sidebar || str_starts_with( $sidebar, 'orphaned_widgets' ) ) ) {
continue;
}
if ( is_array( $widgets ) ) {
foreach ( $widgets as $widget ) {
if ( ( $callback && isset( $wp_registered_widgets[ $widget ]['callback'] ) && $wp_registered_widgets[ $widget ]['callback'] === $callback ) || ( $id_base && _get_widget_id_base( $widget ) === $id_base ) ) {
if ( ! $widget_id || $widget_id === $wp_registered_widgets[ $widget ]['id'] ) {
return $sidebar;
}
}
}
}
}
}
return false;
}