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.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *