列出所有侧边栏名称?


14

我列出了所有这样的侧边栏:

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根本没有帮助。

谢谢!


您到底在哪里列出侧边栏,这有什么目的?
kaiser

Answers:


23

遍历全局:

<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()功能只存在于准确显示为你问。不知道您是否真的想要那样。


如何访问全局数组和对象:

无论如何:您的问题主要是关于如何访问阵列。我为此写了一个问题(以作进一步解释)。请在这里看看。


6

写一个函数为您创建列表?

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 );

希望能有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.