is_dynamic_sidebar()
Определяет, включена ли в теме поддержка виджетов и добавлен ли хотя бы один сайдбар в панель. Условный тег.
Используйте этот условный тег в шаблонах, чтобы, например, подключать CSS-файл для виджетов только когда они реально активны, либо показывать заглушку, если пользователь ещё не добавил ни одного виджета.
Используйте функцию is_active_sidebar(), чтобы проверить наличие виджетов в нужной панели виджетов.
Хуков нет.
Возвращает
true|false.
true— хотя бы один сайдбар содержит виджеты.false— если нет сайдбаров или виджетов (даже если сайдбары зарегистрированы).
Использование
is_dynamic_sidebar();
Примеры
#1 Проверим наличие виджетов.
Выведем текст, если тема поддерживает виджеты:
<?php
if ( is_active_sidebar( 'left-sidebar' ) ) { ?>
<ul id="sidebar">
<?php dynamic_sidebar( 'left-sidebar' ); ?>
</ul>
<?php } ?>
<!-- Тема поддерживает виджеты и хотя бы один виджет установлен -->
<!-- для панели виджетов. Выведем его: -->
<?php if( is_dynamic_sidebar() ){ ?>
<ul id="sidebar">
<?php dynamic_sidebar(); ?>
</ul>
<?php } ?> #2 Выводим запасной блок, если ни один виджет не добавлен
if ( is_dynamic_sidebar() ) {
get_sidebar(); // стандартный сайдбар
}
else {
echo '<p>Добавьте виджеты в панели администратора.</p>';
} #3 Проверка наличия сайдбара
Чтобы проверить наличие сайдбаров в коде плагина, когда нужно подключить виджет к теме, только если есть хоть один сайдбар, то возможно нужно будет проставить приоритет на хук widgets_init, потому что если не ставить приоритет, то ваша функция может сработать быстрее, чем хотя бы один сайдбар будет зарегистирован:
add_action('widgets_init', 'widget_init_my_widget', 999);
Заметки
- Global. Массив. $wp_registered_widgets The registered widgets.
- Global. Массив. $wp_registered_sidebars The registered sidebars.
Список изменений
| С версии 2.2.0 | Введена. |
Код is_dynamic_sidebar() is dynamic sidebar WP 6.9
function is_dynamic_sidebar() {
global $wp_registered_widgets, $wp_registered_sidebars;
$sidebars_widgets = get_option( 'sidebars_widgets' );
foreach ( (array) $wp_registered_sidebars as $index => $sidebar ) {
if ( ! empty( $sidebars_widgets[ $index ] ) ) {
foreach ( (array) $sidebars_widgets[ $index ] as $widget ) {
if ( array_key_exists( $widget, $wp_registered_widgets ) ) {
return true;
}
}
}
}
return false;
}