为每个顶级页面动态注册侧边栏

时间:2013-07-25 作者:Howdy_McGee

我有一个小网站,希望每个页面都有一个不同的侧边栏,其中包含文本块、图像块和链接块等。我想做的是为每个顶级页面注册一个侧边栏:

if ( function_exists(\'register_sidebar\') ){
    $topLevel = get_pages(array(
        \'sort_column\'   => \'post_date\',
        \'hierarchical\'  => 0,
        \'parent\'        => 0,
        \'post_type\'     => \'page\',
        \'post_status\'   => \'publish\'
    ));

    foreach($topLevel as $page)
    {
        //make alphaunermic
        $sidebarID = preg_replace("/[^a-z0-9_\\s-]/", "", strtolower($page->post_title));

        //Clean multiple dashes or whitespaces
        $sidebarID = preg_replace("/[\\s-]+/", " ", strtolower($page->post_title));

        //Convert whitespaces and underscore to dash
        $sidebarID = preg_replace("/[\\s_]/", "-", strtolower($page->post_title));

        register_sidebar(array(  
          \'name\' => $page->post_title,  
          \'id\'   => $sidebarID, 
          \'description\'   => \'\',  
          \'before_widget\' => \'<div id="\'.$sidebarID.\'" class="widget">\'  
          \'after_widget\'  => \'</div>\',  
          \'before_title\'  => \'<h2>\',  
          \'after_title\'   => \'</h2>\'  
        ));
    }
}
1)这可能吗?

2) 有没有更好的办法?

3) 我有一些错误。。。

2 个回复
最合适的回答,由SO网友:Ravinder Kumar 整理而成

请尝试以下代码为每个父页面创建唯一的侧栏

您可以使用$page->post_name(页码段塞)或$page->ID(页面id)作为侧栏id

if ( function_exists(\'register_sidebar\') ){
    /*extract all parent pages */
    $topLevel = get_pages(array(
        \'sort_column\' => \'post_date\',
        \'hierarchical\' => 0,
        \'parent\' => 0
    ));

    foreach($topLevel as $page){
        /* register sidebar for each parent page */
        register_sidebar(array(  
          \'name\' => $page->post_title,  
          \'id\'   => \'sidebar-\'.$page->post_name, 
          \'description\'   => \'This widget display on page "\'.$page->post_title.\'"\',  
          \'before_widget\' => \'<div id="\'.$sidebarID.\'" class="widget">\',
          \'after_widget\'  => \'</div>\',  
          \'before_title\'  => \'<h2>\',  
          \'after_title\'   => \'</h2>\'  
        ));
    }
}

SO网友:mtuttle

如果您这样做是为了在不同的页面上显示不同的内容,并且侧栏的宽度相同(好吧,也许您可以通过在每个页面的正文中添加一个类来更改它),那么一种更简单的方法就是只使用显示小部件,并且只有一个侧栏:

http://wordpress.org/plugins/display-widgets/

它允许您选择哪些小部件显示在哪个页面上。

结束

相关推荐

Call sidebar from a template

我需要在标题中调用侧栏。我已经切换到新的“二十一二”主题,并创建了我自己的儿童主题。有了这个新主题,我决定把事情组织起来,所以我把我的小部件功能、样式表和两个新的边栏模板(一个用于页眉,一个用于页脚小部件)放在一个名为pgwidgets.这是我在标题中使用的调用<? if ( is_front_page() ) : ?> <?php get_sidebar( \'homepage\' ) ; ?> <?php endif ; ?> 这称为s