Get active sidebars

The times they are a-changin’.

This post seems to be older than 6 years—a long time on the internet. It might be outdated.

Findet alle aktiven Sidebars – also Sidebars,  in denen zum gegenwärtigen Zeitpunkt mindestens 1 Widget liegt. Gibt einen Array mit den IDs dieser Sidebars zurück.
Optional kann ein Array mit den IDs einer oder mehrerer Sidebars als Filter übergeben werden. Die Funktion gibt dann nur die IDs der aktiven Sidebars aus dem Kontext des Filters zurück.

Funktion

Die Funktion kann in der functions.php abgelegt werden. Bitte ggf. Anmerkungen weiter unten beachten!

<?php
/*
 * function get_active_sidebars()
 *
 * Returns the IDs of all sidebars containing any widget(s) in an array.
 * Optional: Define an array of sidebar IDs to filter results with.
 *
 * @uses $wp_registered_sidebars
 * @uses is_active_sidebar()
 * @param $sidebars array (optional) IDs of registered sidebars
 * @return array IDs of registered sidebars containing any widget(s) at the moment
 *
 */
function get_active_sidebars( $sidebars = null ) {

global $wp_registered_sidebars;

if( empty( $sidebars ) )
$sidebars = $wp_registered_sidebars;

$active_sidebars = array();

foreach( $sidebars as $sidebar  ) {
if( is_active_sidebar( $sidebar['id'] ) )
array_push( $active_sidebars, $sidebar['id'] );
}

return $active_sidebars;
}
?>

Parameter

Die Funktion überprüft zunächst, ob ein Array als Paramater übergeben wurde, aus die Suchergebnisse gefiltert werden sollen. Mal angenommen, ich habe 2 Sidebars in meinem Theme und möchte mit der Funktion überprüfen, welche der beiden gerade Widgets beinhaltet, dann kann das so aussehen:

<?php get_active_sidebars( array( 'meine_erste_sidebar', 'meine_zweite_sidebar' ) ) ?>

Wurden keine IDs übergeben, nutzt die Funktion die Core-Variable $wp_registered_sidebars, um alle per register_sidebars() registrierten Sidebars zu filtern.

Ausgabe

Ein Array mit den IDs der aktiven Sidebars.

Beispiele

<?php
$sidebar_id = 'meine-sidebar';

if( in_array( $sidebar_id, get_active_sidebars() ) )
echo $sidebar_id . ' ist aktiv.';
else
echo $sidebar_id . ' ist nicht aktiv.';
?>

If you would like to check on only a limited set of active sidebars, just pass an array with the IDs of those sidebars as a parameter to the function:

<?php
$sidebar_id = 'my-sidebar';
$sidebars_filter = array( 'meine-sidebar', 'meine-zweite-sidebar' );

if( in_array( $sidebar_id, get_active_sidebars( $sidebars_filter ) ) )
echo $sidebar_id . ' ist aktiv.';
else
echo $sidebar_id . ' ist nicht aktiv.';
?>

Anmerkungen

Die Funktion gehört nicht zum WordPress Core, auch wenn der Name der Funktion hier danach klingen mag. Wenn du diese Funktion in deiner functions.php ablegst, kann es u.U. sicherer sein, ein eigenes Präfix zu wählen, wie z.B. mein_theme_get_active_sidebars().
Alternativ kannst du auch einen Wrapper um die Funktion legen und sicher stellen, dass sie nicht schon irgendwo zuvor definiert wurde:

<?php
if( ! function_exists( 'get_active_sidebars' ) ) :
function get_active_sidebars() {
/* ... */
}
endif;
?>