どもです。
けっこう前に書いたこちらの記事のパワーアップ版です。
出力は wp_list_categories に近い感じで、子ページがあるときは<li>内に<ul>が出力される感じです。
また、子ページがあるときのみリストを表示するようにしました。
それと、現在表示中のページについては nowPage のクラスがつくようになっています。
プログラム的には、
再帰関数を用いて複数階層の取得と表示を行って、
配列の取得関数を query_posts から get_posts に変更した感じです。
なにはともあれソースをポン!_(:3」∠)_
function get_top_level_page(){
if(is_page()){
$pageParent = "";
$pageID = get_the_ID();
for($i = 1; $i <= 100; $i++){
$pageParent = get_page($pageParent); if($pageParent->post_parent == 0){
break;
}
$pageParent = $pageParent->post_parent;
}
return $pageParent;
}
}
function pageChildList($getPageId,$postId,$pageParent){
$pagesArr = array(
'numberposts' => -1 ,
'post_type' => 'page' ,
'order' => 'ASC' ,
'post_parent' => $getPageId
);
$pageDatas = get_posts($pagesArr);
if($pageDatas){
if($pageParent->ID == $getPageId){ ?>
<aside class="pageArchive">
<h4><a href="<?php echo get_permalink($pageParent->ID); ?>"><?php echo $pageParent->post_title; ?></a></h4>
<?php }
echo '<ul>';
foreach($pageDatas as $pageData){
?><li<?php if($postId==$pageData->ID) echo ' class="nowPage"'; ?>><a href="<?php echo get_permalink($pageData->ID) ?>"><?php echo $pageData->post_title; ?></a><?php
pageChildList($pageData->ID,$postId,$pageParent);
echo '</li>';
}
echo '</ul>';
if($pageParent->ID == $getPageId){ ?>
</aside>
<?php }
}
}
以上を、functions.php に書いておきます。
関数の呼び出しについては、
$postId = get_the_ID();
$pageParent = get_top_level_page();
pageChildList($pageParent->ID,$postId,$pageParent);
こんな感じで。
get_top_level_page() は、最上位ページを取得する用なので、本題は pageChildList() の方です。
$pagesArr が条件を指定するところです。あとは適当にHTMLタグを変えたり、表示するデータを変えたりすれば良いんじゃないかと思います。