is_dynamic_sidebar()WP 2.2.0

Определяет, включена ли в теме поддержка виджетов и добавлен ли хотя бы один сайдбар в панель. Условный тег.

Используйте этот условный тег в шаблонах, чтобы, например, подключать CSS-файл для виджетов только когда они реально активны, либо показывать заглушку, если пользователь ещё не добавил ни одного виджета.

Используйте функцию is_active_sidebar(), чтобы проверить наличие виджетов в нужной панели виджетов.

Хуков нет.

Возвращает

true|false.

  • true — хотя бы один сайдбар содержит виджеты.
  • false — если нет сайдбаров или виджетов (даже если сайдбары зарегистрированы).

Использование

is_dynamic_sidebar();

Примеры

0

#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 } ?>
0

#2 Выводим запасной блок, если ни один виджет не добавлен

if ( is_dynamic_sidebar() ) {
	get_sidebar(); // стандартный сайдбар
}
else {
	echo '<p>Добавьте виджеты в панели администратора.</p>';
}
-1

#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() 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;
}