is_active_widget()
Определяет отображается ли указанный виджет на сайте (во фронтэнде). Получает ID панели, в которой виджет находится.
Функция получает абсолютно все активные виджеты из всех сайдбаров и ищет в них указанный виджет.
Параметр $id_base - основной
Для поиска виджета удобнее всего использовать параметр $id_base. В нем нужно указать ID виджета, который указывается в первом параметре конструктора WP_Widget, при создании виджета (см. register_widget()).
Параметр $widget_id - урезает поиск до конкретного виджета
Но он отвечает за то что вернет функция. Например, на сайте выводится виджет «Текст» и вызывается он два раза. Базовое имя у него text
($id_base == 'text'). А вот ID виджетов будут разные, создаются они как $id_base-$i++
. Т.е. $widget_id у них будут: text-1 и text-2. Далее, если мы не укажем в поиске параметр $widget_id:
is_active_widget( 0, 0, 'text' );
то функция вернет нам первый найденный виджет, не важно text-1 это или text-2. Но если мы укажем параметр $widget_id:
is_active_widget( 0, 'text-1', 'text' );
то функция будет искать конкретный виджет: с базой 'text' и ID 'text-1'.
При этом нельзя указать только параметр $widget_id без $id_base. Тогда функция вернет false. И это мне показалось странным... Может поправят в след. версиях. А в 4.7 пока так.
Параметр $callback - ненужный
Для поиска виджета, вместо $id_base можно указать параметр $callback, но там нужно передавать, массив всех экземпляров функций обратного вызова. Короче, там не понятно что передавать и про этот параметр в 99% случаев проще просто забыть...
Использует глобальную переменную $wp_registered_widgets в которой хранятся все зарегистрированные виджеты.
Хуков нет.
Возвращает
Строку|false
.
- ID сайдбара, например, sidebar-1 в котором найден активный виджет.
- false - если виджет не активен (не найден ни в одном сайдбаре).
- Вернет wp_inactive_widgets, если отключен параметр $skip_inactive и найденный виджет неактивен.
Использование
is_active_widget( $callback, $widget_id, $id_base, $skip_inactive );
- $callback(массив/false)
- callback виджета для проверки. Этот как правило не используется для поиска виджета. Тут нужно указать именно callback виджета из глобальной переменной $wp_registered_widgets.
По умолчанию: false - $widget_id(число/false)
- ID виджета, который нужно найти. ID создается как
база ID + число
-$id_base-$i++
По умолчанию: false - $id_base(строка/false)
База ID виджета. База используется для создания динамического ID. Динамический нужен, потому что виджеты могут использоваться несколько раз. Этот параметр указывается при регистрации виджета в первом параметр при расширении класса WP_Widget (см. register_widget()).
Название базы каждого виджета который есть в WP по умолчанию смотрите в описании функции the_widget().
По умолчанию: false
- $skip_inactive(логический)
- Ставим в 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
Заметки
- Global. Массив. $wp_registered_widgets The registered widgets.
Список изменений
С версии 2.2.0 | Введена. |