如何列出Metabox中的所有侧栏

时间:2013-07-23 作者:fshequin

我正在尝试向每个页面添加一个元框,该页面是所有已注册边栏的下拉列表,然后保存在自定义字段中。

我在用这个metabox class

我已经做到了这一点:

// get registered Sidebars
$sidebars = $GLOBALS[\'wp_registered_sidebars\'];
foreach ( $sidebars as $sidebar ) { 
   $sidebar_options[$sidebar[\'name\']] = $sidebar[\'name\'];
}
然后我在metabox声明中调用$sidebars变量,如下所示:

$meta_boxes[] = array(
    \'id\'         => \'page_metabox\',
    \'title\'      => \'Page Custom Fields\',
    \'pages\'      => array( \'page\', ), // Post type
    \'context\'    => \'normal\',
    \'priority\'   => \'high\',
    \'show_names\' => true, // Show field names on the left
    \'fields\'     => array(
        array(
            \'name\' => \'Page Sidebar\',
            \'desc\' => \'Choose the Sidebar to show on this page.\',
            \'id\'   => /*$prefix .*/ \'erh_page_sidebar\',
            \'type\' => \'select\',
            \'options\' => $sidebar_options,  

        )

    ) 

);
这是$sidebar\\u选项的结果:

$sidebar_options = array (
 \'Header Sidebar\' => \'Header Sidebar\',
 \'Main Sidebar\' => \'Main Sidebar\',
 \'News Sidebar\' => \'News Sidebar\',
 \'Home Panel 1\' => \'Home Panel 1\',
 \'Home Panel 2\' => \'Home Panel 2\',
 \'Home Panel 3\' => \'Home Panel 3\',
 \'Footer 1 Sidebar\' => \'Footer 1 Sidebar\',
 \'Footer 2 Sidebar\' => \'Footer 2 Sidebar\',
 \'Footer 3 Sidebar\' => \'Footer 3 Sidebar\',
 \'Footer 4 Sidebar\' => \'Footer 4 Sidebar\',
 \'Footer 5 Sidebar\' => \'Footer 5 Sidebar\',
 \'Footer 6 Sidebar\' => \'Footer 6 Sidebar\',
 \'Right Sidebar 1\' => \'Right Sidebar 1\',
 \'Staff login Sidebar\' => \'Staff login Sidebar\',
 \'Staff Sidebar\' => \'Staff Sidebar\',
 \'Careers Sidebar\' => \'Careers Sidebar\',
 \'Care Providers Sidebar\' => \'Care Providers Sidebar\',
  )
我的问题是,这个metabox类希望下拉选项采用这种形式,我不知道如何做到这一点:

array( \'name\' => \'Sidebar 1\', \'value\' => \'Right Sidebar 1\', ),
array( \'name\' => \'Sidebar 2\', \'value\' => \'Right Sidebar 2\', ),
array( \'name\' => \'Sidebar 3\', \'value\' => \'Right Sidebar 3\', ),
非常感谢您的帮助:-)

1 个回复
最合适的回答,由SO网友:iEmanuele 整理而成

尝试以下操作:

<?php
    $sidebar_options = array();
    $sidebars = $GLOBALS[\'wp_registered_sidebars\'];

    foreach ( $sidebars as $sidebar ){
        $sidebar_options[] = array(
            \'name\'  => $sidebar[\'name\'],
            \'value\' => $sidebar[\'id\']
        );
    }
?>
这会打印出来(带有我注册的边栏):

Array
(
    [0] => Array
        (
            [name] => Language Menu
            [value] => sidebar-1
        )

    [1] => Array
        (
            [name] => Primary Sidebar
            [value] => primary-sidebar
        )

    [2] => Array
        (
            [name] => Secondary Sidebar
            [value] => secondary-sidebar
        )

    [3] => Array
        (
            [name] => Footer left box
            [value] => footer_box_left
        )

    [4] => Array
        (
            [name] => Footer middle box
            [value] => footer_box_middle
        )

    [5] => Array
        (
            [name] => Footer right box
            [value] => footer_box_right
        )

)
在“选择”标记中,这将变为:

<html>
    <select>
        <?php foreach( $sidebar_options as $option ){ ?>
            <option value="<?php echo $option[\'value\']; ?>"><?php echo $option[\'name\']; ?></option>
        <?php } ?>
    </select>
</html>
希望有帮助!

结束

相关推荐

Metabox显示在错误的页面上

我有两个不同的函数,输出不同的metabox,一个用于页面,另一个仅用于帖子。出于某种原因,我为帖子创建的页面覆盖了页面上的页面,并显示在页面和帖子管理面板上。我希望每个都显示在相关的$页面上。页面元框代码-http://pastebin.com/PdTzQ49fpost元框代码-http://pastebin.com/rh0ZJ1WU如果有人能告诉我为什么post meta框会覆盖页面,我会非常感激,因为我已经搜索了几个小时,没有找到解决方案。谢谢