親カテゴリに属するサブカテゴリのIDを取得する関数

以前、サブカテゴリ毎に記事をまとめて表示2という記事を書きましたが、少し需要があるようなのでもう少しスマート(だと思える)取得をしてみます。

といっても「怪しい正規表現」から「データベースで直接取得」に変わっただけですけど。

WordPress サブカテゴリのIDを取得する関数

下記の関数を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]

WordPress サブカテゴリのIDを取得する関数

取得できるのは直下のサブカテゴリのみです。
使用方法としては、以下のように使えます。

[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]

WordPress サブカテゴリのIDを取得する関数

間違いがあればご指摘下さい。