is_dynamic_sidebar()WP 2.2.0

Проверяет поддерживается ли темой функция сайдбаров (виджеты и панели для них) и установлен ли для панели хотя бы один виджет. Условный тег.

is_dynamic_sidebar() проверяет зарегистрирована ли хоть одна панель виджетов (сайдбар) для темы и добавлен ли в зарегистрированную панель хотя бы один виджет.

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

Хуков нет.

Возвращает

true|false. Логические true или false.

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

is_dynamic_sidebar();

Примеры

0

#1 Проверим наличие виджетов.

Выведем текст, если тема поддерживает виджеты:

if ( is_active_sidebar( 'left-sidebar' ) ) :
	<ul id="sidebar">
		<?php dynamic_sidebar( 'left-sidebar' ); ?>
	</ul>
<?php endif; ?>

<?php if( is_dynamic_sidebar() ){
	// Тема поддерживает виджеты и хотя бы один виджет установлен
	// для панели виджетов. Выведем его:
	?>
	<ul id="sidebar">
		<?php dynamic_sidebar(); ?>
	</ul>
<?php } ?>
0

#2 Проверка наличия сайдбара

Чтобы проверить наличие сайдбаров в коде плагина, когда нужно подключить виджет к теме, только если есть хоть один сайдбар, то возможно нужно будет проставить приоритет на хук widgets_init, потому что если не ставить приоритет, то ваша функция может сработать быстрее, чем хотя бы один сайдбар будет зарегистирован:

add_action('widgets_init', 'widget_init_my_widget', 999);

Заметки

  • Global. Массив. $wp_registered_widgets Registered widgets.
  • Global. Массив. $wp_registered_sidebars Registered sidebars.

Список изменений

С версии 2.2.0 Введена.

Код is_dynamic_sidebar() WP 6.4.3

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;
}