web-dev-qa-db-fra.com

Enregistrer dynamiquement les barres latérales pour chaque page de niveau supérieur

J'ai un petit site Web qui veut une barre latérale différente pour chaque page contenant des blocs de texte, des blocs d'images, des blocs de liens, etc. Ce que j'essaie de faire, c'est d'enregistrer une barre latérale pour chaque page de niveau supérieur:

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) est-ce possible?

2) Y a-t-il une meilleure façon de s'y prendre?

3) Je reçois quelques erreurs ...

1
Howdy_McGee

essayez ce code pour créer une barre latérale unique pour chaque page parente

vous pouvez utiliser $page->post_name (slug de page) ou $page->ID (identifiant de page) comme identifiant de barre latérale

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>'  
        ));
    }
}
1
Ravinder Kumar

Si vous faites cela pour afficher un contenu différent sur différentes pages et que vos barres latérales ont la même largeur (eh bien, vous pouvez le changer en ajoutant une classe au corps de chaque page), une approche beaucoup plus simple consisterait simplement à utiliser les widgets d'affichage. et avez juste un sidebar:

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

Il vous permet de choisir quels widgets apparaissent sur quelle page/s.

1
mtuttle