情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。
固定ページの階層が4階層。最上階層ごとに分けて、サイドバーのナビに表示するのは2階層目から。
1階層目のページにいる時は2階層目だけを表示。
2階層目のページにいる時は2階層目と表示中ページの子ページを開く。
3階層目のページにいる時は2階層目・3階層目と表示中ページの子ページを開く。
4階層目のページにいる時は2階層目・3階層目と表示中ページの親の子ページを開く。
<style type="text/css"> ul.children {display:none;} <?php if($post->post_parent AND !get_page($post->post_parent)->post_parent):?> li.current_page_item ul.children {display:block;} li.current_page_item ul.children li ul.children {display:none;} <?php elseif(!has_subpage()): global $post; $pID = $post->post_parent; $ppID = get_page($post->post_parent)->post_parent; ?> li.page-item-<?php echo $ppID; ?> ul.children {display:block;} li.page-item-<?php echo $ppID; ?> ul.children li ul {display:none;} li.page-item-<?php echo $ppID; ?> ul.children li.page-item-<?php echo $pID; ?> ul {display:block;} <?php else: ?> li.current_page_item ul.children, li.current_page_ancestor ul.children, li.current_page_parent ul.children {display:block;} <?php endif; ?> </style>
親ページはあるが、その親ページには親ページがない=2階層目、子ページがない=最下層、で、分岐。
has_subpage の条件分岐を有効にするためにfunctions に
function has_subpage (){ global $post; $pages = get_pages("sort_column=menu_order&amp;depth=1&amp;child_of={$post->ID}"); if ($pages) return TRUE; }