以前、サブカテゴリ毎に記事をまとめて表示2という記事を書きましたが、少し需要があるようなのでもう少しスマート(だと思える)取得をしてみます。
といっても「怪しい正規表現」から「データベースで直接取得」に変わっただけですけど。
下記の関数をfunctions.php辺りに入れておけばいつでも使えます。
[php]
// サブカテゴリIDを取得する関数
function get_subcat_id( $cat_id = null ) {
global $wpdb;
if($cat_id == null) return false;
// サブカテゴリを取得
$sub_cat = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM $wpdb->term_taxonomy WHERE parent=%d", $cat_id));
return $sub_cat;
}
[/php]
取得できるのは直下のサブカテゴリのみです。
使用方法としては、以下のように使えます。
[php]
<?php
// サブカテゴリのIDを取得(親カテゴリのIDを5とする)
$sub_cat = get_subcat_id(5);
// サブカテゴリが存在するか
if($sub_cat) {
// ループして処理
foreach($sub_cat as $id) :
?>
<h3><a href="<?php echo get_category_link($id); ?>"><?php echo get_cat_name($id); ?></a></h3>
<ul>
<?php if (have_posts()) : query_posts("posts_per_page=5&cat=$id&orderby=ID&order=desc"); ?>
<?php while (have_posts()) : the_post(); ?>
<li><?php the_time(‘y-m-d’); ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; wp_reset_query(); ?>
</ul>
<?php
endforeach;
} else {
echo ‘<p>サブカテゴリは存在しません。</p>’;
}
?>
[/php]
間違いがあればご指摘下さい。