Alle Namen der Seitenleiste auflisten?

14

Ich liste alle Seitenleisten so auf:

global $wp_registered_sidebars;

echo '<pre>';
print_r($wp_registered_sidebars); 
echo '</pre>'

Also bekomme ich so etwas wie:

Array
(
    [sidebar-1] => Array
        (
            [name] => Sidebar #1
            [id] => sidebar-1
            [description] => Sidebar number 1
            [before_widget] => 
            [after_widget] => 
            [before_title] => 
            [after_title] =>
        )

 (...)

)

Aber ich würde sie gerne als Auswahlliste anzeigen, wie zum Beispiel:

<select>
  <option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
  <option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
(...)
</select>

Wordpress Codex ist überhaupt nicht hilfreich.

Vielen Dank!

Wordpressor
quelle
Wo genau listen Sie die Seitenleisten auf und wozu dient dies?
Kaiser

Antworten:

23

Durch die globale Schleife:

<select>
<?php foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) { ?>
     <option value="<?php echo ucwords( $sidebar['id'] ); ?>">
              <?php echo ucwords( $sidebar['name'] ); ?>
     </option>
<?php } ?>
</select>

Hinweis:
Die ucwords()Funktion dient nur dazu, es genau so anzuzeigen, wie Sie es gewünscht haben. Ich bin mir nicht sicher, ob du das wirklich willst.


So greifen Sie auf globale Arrays und Objekte zu:

Wie auch immer: Bei Ihrem Q geht es hauptsächlich darum, wie Sie auf Arrays zugreifen. Ich habe eine Frage dazu geschrieben (zur weiteren Erklärung). Bitte schauen Sie hier vorbei.

Kaiser
quelle
6

Schreiben Sie eine Funktion, um die Liste für Sie zu erstellen?

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
}

Rufen Sie es dann einfach überall dort auf, wo Sie eine Auswahlliste mit den Seitenleisten erstellen möchten, und geben Sie optional einen Namen ein, z.

sidebar_selectbox();

oder

sidebar_selectbox( 'theme_sidebars' );

Zusätzlich und optional einen aktuell ausgewählten Wert übergeben ...

sidebar_selectbox( 'theme_sidebars', $var_holding_current );

Ich hoffe, das hilft.

t31os
quelle