問題描述

我列出所有這樣的側邊欄:

global $wp_registered_sidebars;

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

所以我得到的東西像:

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

 (...)

)

但我希望將它們顯示為一個選擇列表,如:

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

WordPress Codex 根本沒有幫助。

謝謝!

最佳解決方案

環繞全球:

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

注意:ucwords()功能只能按照您的要求顯示。不確定你是否真的想要


如何訪問全局數組& 對象:

無論如何:你的 Q 主要是關於如何訪問數組。我寫了一個關於這個問題 (進一步的解釋) 。 Please take a look over here.

次佳解決方案

寫一個函數為你創建列表?

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
}

然後只需將其稱為無論您需要創建帶有邊欄的選擇列表,可選地傳遞一個名稱,例如。

sidebar_selectbox();

要麼

sidebar_selectbox( 'theme_sidebars' );

另外和可選地,傳遞當前選定的值…

sidebar_selectbox( 'theme_sidebars', $var_holding_current );

希望有幫助。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。