Функция is_active_widget() в WordPress: аргументы, возвращаемые значения, примеры использования

## Функция 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;
}

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *