sidebar.phpの表示を修正する
どう変えるか
sideにすべてのページが表示されているとページ数が増えたときに長くなってしまうので、現在表示中のページと同じグループのものだけを展開し、ほかは親ページだけを表示するようにしたい。
すなわち、固定ページの一覧を取得後、すべてのページについて
親ページなら表示、現在のページの親ページと同じ親を持つ子ページなら表示
ということをしたい。
固定ページの一覧を取得
まずは、固定ページの一覧を取得する。wp_list_pages()だとすぐにページのリストが表示されてしまう。単にリストを取得するにはget_pages()を使う。$pagelist=get_pages(‘sort_column=menu_order’)とすることで$pagelistに固定ページのリストが取得できる。
現在表示中のページの親ページのIDを取得
現在表示中のページは$postなので$post->post_parentが親ページのIDとなる。もし0ならばこのページが親ページだということになる。
$pid=$post->ID; if($pid==0){$pid=$post->parent;]
として展開するグループの親ページのIDを取得しておく。
リストを出力
取得した$pagelistの全要素をforeach($pagelist as $p){}を使って調べる。
foreach($pagelist as $p){ $widp=$p->post_parent; // 親ページID $wlink=get_permalink($p->ID); // permalink $wtitle=$p->post_title; // title if($widp==0){ // 親ページのとき echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>'; // linkとtitle出力 }else if($widp==$idp){ //親ページが現在表示中のページの親と同じなら表示 echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>'; // linkとtitle出力 } }
という感じになる。実際には<ul>や<li>も出力しなければならないので、それらを含めると次のようになる。
<div id="side"> <h1>WordPressを始めよう</h1> <ul> <?php $idp=$post->post_parent; // 親ページのIDを調べる if($idp==0){$idp=$post->ID;} // 親がなければ自分が親 $pagelist=get_pages('sort_column=menu_order'); // ページリストを取得 $f=0; foreach($pagelist as $p){ $widp=$p->post_parent; // 親ページID $wlink=get_permalink($p->ID); // permalink $wtitle=$p->post_title; // title if($widp==0){ // 親ページのとき if($f==1){ // 2番目以後は閉じタグ出力 echo '</ul></li>'; } echo '<li><a href="',$wlink,'">',$wtitle,'</a><ul>'; // linkとtitle出力 $f=1; }else if($widp==$idp){ //親ページが現在表示中のページの親と同じなら表示 echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>'; // linkとtitle出力 } }?> </ul></li></ul> </div>