以下cat-speak.netさんのエントリ
http://cat-speak.net/2011/05/15/64/よりメモ
※上記みたほうがみやすい
アーカイブ.phpにそのまま貼り付けて不要な表示を削ったら思い通りの表示になった。すぺしゃるさんくす!

<以下引用>

 

カテゴリーアーカイブ(category.php)で、親カテゴリ・子カテゴリのどちらのアーカイブでも、子カテゴリの一覧を表示する方法。

category.php

<?php //$catに最上位カテゴリの情報を入れる $cat = get_category($cat); while ( $cat->parent > 0 ) $cat = get_category( $cat->parent ); //親カテゴリIDを取得 $parentID = attribute_escape($cat->cat_ID); //子カテゴリIDを全て取得し、配列に入れる $catChildren = get_category_children($parentID); $catIDs = explode('/',$catChildren); array_shift($catIDs); sort ($catIDs); ?> <ul id="catChild"> <?php //ループしてHTMLを作成 for($i=0; $i<count($catIDs); $i++) { $cats=get_category($catIDs[$i]); ?> <li> <a href="<?php echo get_category_link($catIDs[$i]); ?>"> <?php echo get_catname($catIDs[$i]); ?></a> </li> <?php } ?> </ul>

出力結果

<ul id="catChild"> <li> <a href="http://cat-speak.net/?cat=8"> メディア</a> </li> <li> <a href="http://cat-speak.net/?cat=10"> インフォメーション</a> </li> </ul>

解説

<?php //$catに最上位カテゴリの情報を入れる $cat = get_category($cat); while ( $cat->parent > 0 ) $cat = get_category( $cat->parent );

親カテゴリに居る時、$cat->parent(親カテゴリID)には、0が返されるので、while文を通すことで$catには、親カテゴリでは自分自身のIDが入り、子カテゴリでは親カテゴリIDが入ります。 ここで、カテゴリが親子関係ののみであれば、if文でかまわないのかもしれませんが、while文にすることで、孫以降のカテゴリでも最上位カテゴリの情報が$catに入ります。

//親カテゴリIDを取得 $parentID = attribute_escape($cat->cat_ID); //子カテゴリIDを全て取得し、配列に入れる $catChildren = get_category_children($parentID); $catIDs = explode('/',$catChildren); array_shift($catIDs); sort ($catIDs); ?>

get_category_childrenは子カテゴリを取得するwordpressの関数です。 <?php echo get_category_children($parentID); ?> と記述すると、/10/12/8 のように、「/」で区切られた子カテゴリIDの値になります。 explode関数で、ひとつひとつのカテゴリIDにバラして配列に入れて、ループして使えるようにします。 その後、ここではIDが小さいものから順になるようにソートしています。

追記:この過程は、get_termsを使うと、下記でも可能でした。

$catIDs = get_terms( 'category', array( 'child_of' => $parentID, 'orderby' => 'id', 'fields' => 'ids' ) );
<?php //ループしてHTMLを作成 for($i=0; $i<count($catIDs); $i++) { $cats=get_category($catIDs[$i]); } ?>

count($catIDs)は配列の要素数なので、全ての子カテゴリの回数分だけループを続けます。 次の$cats=get_category($catIDs[$i]);で、$catには、子カテゴリの情報が入るので、あとは好きなように情報をとりだしてHTMLを成形するだけになります。