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 , в якій зберігаються всі зареєстровані віджети.
wp_get_sidebars_widgets()
(дуже швидко) | 50000 разів – 0.06 сек
(швидкість світла) |
PHP 7.0.8, WP 4.7
Хуків немає.
Повертає
Строку|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
список змін
З версії 2.2.0 | Введено. |