Функция is_active_widget()
в WordPress позволяет определить, активен ли указанный виджет на фронтенде сайта и в каком сайдбаре он находится. Это полезно для выполнения определённых действий, если виджет действительно используется на странице.
Описание
Функция возвращает ID сайдбара, в котором активен виджет с указанным callback
, widget_id
или id_base
. Если же виджет не найден или не активен, функция возвращает false
. Чтобы функция работала корректно, она должна быть вызвана после инициализации виджетов, например, на хуке init
.
is_active_widget( callable|false $callback = false, string|false $widget_id = false, string|false $id_base = false, bool $skip_inactive = true ): string|false
- $callback (необязательно): callback виджета для проверки. Обычно не используется. По умолчанию
false
. - $widget_id (необязательно): конкретный ID виджета. Удобен для проверки определённого экземпляра виджета.
- $id_base (необязательно): базовый ID виджета, который создаётся при его регистрации через класс
WP_Widget
. Часто используется для проверки группы виджетов одного типа. - $skip_inactive (необязательно): нужно ли проверять в неактивных виджетах. По умолчанию
true
(не ищет в неактивных).
Пример 1: Проверка наличия активного виджета
Этот пример проверяет, активен ли виджет с базовым ID calendar
:
$sidebar_id = is_active_widget( false, false, 'calendar' );
if ( $sidebar_id ) {
echo 'Виджет "Календарь" активен в сайдбаре: ' . $sidebar_id;
} else {
echo 'Виджет "Календарь" не активен.';
}
Функция вернёт ID сайдбара, если виджет активен, или false
, если он не используется.
Пример 2: Проверка конкретного виджета по его ID
Если вы хотите проверить наличие определённого экземпляра виджета, например, text-3
, можно указать его точный ID:
$sidebar_id = is_active_widget( false, 'text-3', 'text' );
if ( $sidebar_id ) {
echo 'Виджет "Текст-3" активен в сайдбаре: ' . $sidebar_id;
} else {
echo 'Виджет "Текст-3" не активен.';
}
Этот код проверяет конкретный виджет с базовым ID text
и ID экземпляра text-3
.
Пример 3: Поиск в неактивных виджетах
Если вам нужно найти виджет даже в неактивных областях (в админке), можно отключить параметр $skip_inactive
. В этом случае функция вернёт wp_inactive_widgets
, если виджет не активен, но находится в админке.
$sidebar_id = is_active_widget( false, false, 'text', false );
if ( $sidebar_id === 'wp_inactive_widgets' ) {
echo 'Виджет "Текст" находится в неактивных виджетах.';
} elseif ( $sidebar_id ) {
echo 'Виджет "Текст" активен в сайдбаре: ' . $sidebar_id;
} else {
echo 'Виджет "Текст" не найден.';
}
Пример 4: Загрузка скрипта только при активном виджете
Функция может быть полезна для выполнения специфических действий, например, загрузки скриптов только при наличии активного виджета:
if ( is_active_widget( false, false, 'custom_widget', true ) ) {
wp_enqueue_script( 'custom-widget-script' );
}
В этом примере скрипт загружается только если виджет с базовым ID custom_widget
активен на фронтенде.
Заключение
Функция is_active_widget()
— это полезная функция для проверки активности виджетов и выполнения действий в зависимости от их наличия. Она помогает предотвратить лишние запросы или загрузки ресурсов на страницах, где определённые виджеты не используются.