web-dev-qa-db-ja.com

各トップレベルページのサイドバーを動的に登録する

私は小さなウェブサイトを持っていて、それぞれのページにはテキストのブロック、画像のブロック、そしてリンクのブロックなどを含むサイドバーが欲しいのです。

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)エラーがいくつかあります。

1
Howdy_McGee

各親ページに固有のサイドバーを作成するためにこのコードを試してください

サイドバーIDとして$page->post_name(ページスラッグ)または$page->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>'  
        ));
    }
}
1
Ravinder Kumar

異なるページに異なるコンテンツを表示し、サイドバーの幅が同じであれば(たぶん、各ページの本体にクラスを追加することで変更できます)、もっと単純な方法は、表示ウィジェットを使うことですサイドバーは1つだけです。

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

どのウィジェットをどのページに表示するかを選択できます。

1
mtuttle