Come elencare tutti i nomi delle sidebar in WordPress?
Sto elencando tutte le sidebar in questo modo:
global $wp_registered_sidebars;
echo '<pre>';
print_r($wp_registered_sidebars);
echo '</pre>'
E ottengo qualcosa come:
Array
(
[sidebar-1] => Array
(
[name] => Sidebar #1
[id] => sidebar-1
[description] => Sidebar numero 1
[before_widget] =>
[after_widget] =>
[before_title] =>
[after_title] =>
)
(...)
)
Ma vorrei visualizzarle come un menu a tendina, tipo:
<select>
<option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
<option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
(...)
</select>
Il Codex di WordPress non è molto utile su questo argomento.
Grazie!

Cicla attraverso il globale:
<select>
<?php foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) { ?>
<option value="<?php echo ucwords( $sidebar['id'] ); ?>">
<?php echo ucwords( $sidebar['name'] ); ?>
</option>
<?php } ?>
</select>
Nota:
La funzione ucwords()
è presente solo per visualizzarlo esattamente come richiesto. Non sono sicuro se sia realmente necessario.
Come accedere ad array e oggetti globali:
In ogni caso: La tua domanda riguarda principalmente come accedere agli array. Ho scritto una domanda al riguardo (per ulteriori spiegazioni). Dai un'occhiata qui.

Scrivere una funzione per creare la lista al posto tuo?
function sidebar_selectbox( $name = '', $current_value = false ) {
global $wp_registered_sidebars;
if ( empty( $wp_registered_sidebars ) )
return;
$name = empty( $name ) ? false : ' name="' . esc_attr( $name ) . '"';
$current = $current_value ? esc_attr( $current_value ) : false;
$selected = '';
?>
<select<?php echo $name; ?>>
<?php foreach ( $wp_registered_sidebars as $sidebar ) : ?>
<?php
if ( $current )
$selected = selected( $current === $sidebar['id'], true, false ); ?>
<option value="<?php echo $sidebar['id']; ?>"<?php echo $selected; ?>><?php echo $sidebar['name']; ?></option>
<?php endforeach; ?>
</select>
<?php
}
Poi chiamala semplicemente dove ti serve per creare una lista select con le sidebar, passando opzionalmente un nome, es:
sidebar_selectbox();
oppure
sidebar_selectbox( 'theme_sidebars' );
Inoltre, opzionalmente, puoi passare un valore attualmente selezionato...
sidebar_selectbox( 'theme_sidebars', $var_holding_current );
Spero sia utile.
