wordpressでサイト制作しているとサイドバーにサブメニューを追加したくなったりします。
<?php wp_list_categories(); ?>を使えば簡単なのですが全てのカテゴリーが表示されてしまいますよね。excludeを使ったり手作業で1ページごとにソースを書くのも現実的でないしwordpressをCMSとして利用する意味がありません。なんとか動的にページごとに合ったサブメニューを出力できないものかと悩んでいました。
- 親カテゴリー
- 子カテゴリーA
- 孫カテゴリーA
- 孫カテゴリーB
- 孫カテゴリーC
- 子カテゴリーB
- 子カテゴリーC
- 子カテゴリーA
上の構造の場合、親カテゴリーページの時は子カテゴリーA,B,Cが表示され孫カテゴリーは表示されなくて、子カテゴリーAページの時は孫カテゴリーA,B,Cのみが表示されるようにしたいのです。
つまり、子カテゴリーのみを表示したいわけです。
いろいろ探してみたところWordPressのサブページナビゲーションを動的にする方法を発見!
記事内のソースを有難く使わせていただきました。
しかし、親カテゴリーページの時にどうしても子カテゴリー、孫カテゴリーも全て表示されてしまいます。
そこでソースをいじってみました。
【元のソース】
<?php
global $wp_query;
if( empty($wp_query->post->post_parent) ) {
$parent = $wp_query->post->ID;
} else {
$parent = $wp_query->post->post_parent;
} ?>
<?php if(wp_list_pages(“title_li=&child_of=$parent&echo=0″ )): ?>
<div id=”submenu”>
<ul>
<?php wp_list_pages(“title_li=&child_of=$parent” ); ?>
</ul>
</div>
<?php endif; ?>
【改変ソース】
<?php
global $wp_query;
if( empty($wp_query->post->post_children) ) {
$parent = $wp_query->post->ID;
} else {
$parent = $wp_query->post->post_children;
} ?>
<?php if(wp_list_pages(“title_li=&child_of=$parent&echo=0″ )): ?>
<div id=”submenu”>
<ul>
<?php wp_list_pages(“title_li=&child_of=$parent&depth=1” ); ?>
</ul>
</div>
<?php endif; ?>
parentをchildrenに修正し、1番目の階層のみ表示するという&depth=1を入れました。
このソースをサイドバーに貼り付けるだけです!