wordpress 子カテゴリーのみのリスト表示


wordpressでサイト制作しているとサイドバーにサブメニューを追加したくなったりします。

<?php wp_list_categories(); ?>を使えば簡単なのですが全てのカテゴリーが表示されてしまいますよね。excludeを使ったり手作業で1ページごとにソースを書くのも現実的でないしwordpressをCMSとして利用する意味がありません。なんとか動的にページごとに合ったサブメニューを出力できないものかと悩んでいました。

  • 親カテゴリー
    • 子カテゴリーA
      • 孫カテゴリーA
      • 孫カテゴリーB
      • 孫カテゴリーC
    • 子カテゴリーB
    • 子カテゴリーC

上の構造の場合、親カテゴリーページの時は子カテゴリー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を入れました。

このソースをサイドバーに貼り付けるだけです!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>