Barras laterais de registro dinamicamente para cada página de nível superior

Eu tenho um pequeno site que quer uma barra lateral diferente para cada página contendo blocos de texto, blocos de imagens e blocos de links, etc. O que estou tentando fazer é registrar uma barra lateral para cada página de nível superior:

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' => '
' 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

' )); } }

1) isso é possível?

2) Existe uma maneira melhor de fazer isso?

3) Estou recebendo alguns erros …

Solutions Collecting From Web of "Barras laterais de registro dinamicamente para cada página de nível superior"

tente este código para criar barra lateral exclusiva para cada página pai

você pode usar $page->post_name (slug da página) ou $page->ID (id da página) como ID da barra lateral

 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' => '
', 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

' )); } }

Se você estiver fazendo isso para exibir conteúdo diferente em páginas diferentes e suas barras laterais são da mesma largura (bem, talvez você possa alterá-lo adicionando uma class ao corpo de cada página), uma abordagem muito mais simples seria apenas usar Widgets de exibição e tem apenas uma barra lateral:

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

Ele permite que você escolha quais widgets aparecem em qual página / s.