コーポレートページのナビを作成しました。固定ページを上下左右に移動出来るSidebarです。
構成を下記のように仮定し、動作を考えます。
―Home
― A
―― Aa
― B
―― Ba
―― Bb
――― Bba
――― Bbb
――― Bbc
―C
―D
希望する出方は、現在の固定ページ同階層+自分の子供。
<Aにいる場合>
[Home]
― A
―― Aa
― B
― C
― D
<Bbにいる場合>
[B]
― Ba
― Bb
―― Bba
―― Bbb
―― Bbc
<Bbbにいる場合>
[Ba]
― Bba
― Bbb
― Bbc
<Cにいる場合>
[Home]
― A
― B
― C
― D
このリスト+[自分の親の表示]があれば、上下左右に移動できるはず。
と言うことでwp_list_pages()の標準オプションにはそのような設定がなく、
beginsprite logさんの、Wordpress, 親ページと子ページを全部出力を参考にがんばってみました。
/***************************/
<div id="SideMenu">
<h2>
<?php
//親を出す
if($post->post_parent){
echo '<a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a>';
}else{
echo '<a href="/">ホーム</a>';
}
?>
</h2>
<div>
<ul>
<?php
if(wp_list_pages("title_li=&child_of=$post->ID&echo=0" )){
//子供がいるときは、同階層(兄弟)と、自分の子供だけ出す。
$list_pgs='';
$wpdb;
//同階層固定ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->post_parent ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//子供ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->ID ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//同階層と子供ページのIDをwp_list_pages()に投げ込んで出力。
wp_list_pages('include='.$list_pgs.',&title_li=' . __('Pages').'&title_li=');
}else{
//子供がいないときは、同階層だけ出力。
echo wp_list_pages('child_of='.$post->post_parent.'&depth=1&title_li=&sort_column=menu_order');
}
?>
</ul>
</div>
</div>
/***************************/
無駄な処理をしているような気がしますが、、。 希望の動きなのでOK!
----
鶴羽佳秀
―Home
― A
―― Aa
― B
―― Ba
―― Bb
――― Bba
――― Bbb
――― Bbc
―C
―D
希望する出方は、現在の固定ページ同階層+自分の子供。
<Aにいる場合>
[Home]
― A
―― Aa
― B
― C
― D
<Bbにいる場合>
[B]
― Ba
― Bb
―― Bba
―― Bbb
―― Bbc
<Bbbにいる場合>
[Ba]
― Bba
― Bbb
― Bbc
<Cにいる場合>
[Home]
― A
― B
― C
― D
このリスト+[自分の親の表示]があれば、上下左右に移動できるはず。
と言うことでwp_list_pages()の標準オプションにはそのような設定がなく、
beginsprite logさんの、Wordpress, 親ページと子ページを全部出力を参考にがんばってみました。
/***************************/
<div id="SideMenu">
<h2>
<?php
//親を出す
if($post->post_parent){
echo '<a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a>';
}else{
echo '<a href="/">ホーム</a>';
}
?>
</h2>
<div>
<ul>
<?php
if(wp_list_pages("title_li=&child_of=$post->ID&echo=0" )){
//子供がいるときは、同階層(兄弟)と、自分の子供だけ出す。
$list_pgs='';
$wpdb;
//同階層固定ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->post_parent ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//子供ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->ID ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//同階層と子供ページのIDをwp_list_pages()に投げ込んで出力。
wp_list_pages('include='.$list_pgs.',&title_li=' . __('Pages').'&title_li=');
}else{
//子供がいないときは、同階層だけ出力。
echo wp_list_pages('child_of='.$post->post_parent.'&depth=1&title_li=&sort_column=menu_order');
}
?>
</ul>
</div>
</div>
/***************************/
無駄な処理をしているような気がしますが、、。 希望の動きなのでOK!
----
鶴羽佳秀
コメントする