私は小さなウェブサイトを持っていて、それぞれのページにはテキストのブロック、画像のブロック、そしてリンクのブロックなどを含むサイドバーが欲しいのです。
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)エラーがいくつかあります。
各親ページに固有のサイドバーを作成するためにこのコードを試してください
サイドバー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つだけです。
http://wordpress.org/plugins/display-widgets/
どのウィジェットをどのページに表示するかを選択できます。