Aktive Widget-Bereiche abfragen

Wer im Theme Widgets nutzt und dazu noch diverse Hirarchien unterbringt, der wird schnell merken, dass es eigentlich nur dann Sinn macht, das HTML zu dem jeweiligen Bereich auszugeben, wenn der Widget-Bereich auch vom User genutzt wird, wenn also Widgets im Bereich abgelegt sind.

WP Adventskalender 07
Wer im Theme Widgets nutzt und dazu noch diverse Hierarchien unterbringt, der wird schnell merken, dass es eigentlich nur dann Sinn macht, das HTML zu dem jeweiligen Bereich auszugeben, wenn der Widget-Bereich auch vom User genutzt wird, wenn also Widgets im Bereich abgelegt sind.

Diesem Thema haben sie die Entwickler des Theme-Framework Thematic schon seit langer Zeit angenommen und die Lösung ist ebenso interessant für Autoren, die ihr Theme ohne dieses Framework erstellen.
Dazu genügt eine Funktion, die den bekannten Conditional Tags von WordPress gleich kommt. Diese Funktion wird in der functions.php des Themes abgelegt.


function is_sidebar_active($index) {
	global $wp_registered_sidebars;

	$widgetcolums = wp_get_sidebars_widgets();

	if ($widgetcolums[$index])
		return true;

	return false;
}

Damit wird die Ausgabe des Widget-Bereiches nur genutzt, wenn es auch Inhalte gibt.
Im Template könnte die Abfrage beispielsweise wie folgt aussehen.


<?php if ( function_exists('is_sidebar_active') && is_sidebar_active('sidebar') ) { ?>
	<div id="sidebar">
		<ul>
			<?php dynamic_sidebar('sidebar'); ?>
		</ul>
	</div>
<?php } ?>

Das obige Beispiel lädt den Inhalt nur, wenn der Widget-Bereich mit der ID sidebar Inhalte hat, also wenn Widgets in diesem Bereich genutzt werden.

Seit WordPress Version 2.8 gibt es dazu auch eine Funktion im Core und man muss die obige Funktion nicht eigens hinzu bringen is_active_sidebar(). Damit geht die Prüfung ebenso einfach und sicher.


<?php if ( function_exists('is_active_sidebar') && is_active_sidebar('sidebar') ) { ?>
	<div id="sidebar">
		<ul>
			<?php dynamic_sidebar('sidebar'); ?>
		</ul>
	</div>
<?php } ?>

Kommentare sind geschlossen.