Cat Speak

札幌在住のWebデザイナー・コモモのブログ

ホーム > ウェブ制作Tips > WordPress > カテゴリーアーカイブで子カテゴリを持つかどうか判定する

カテゴリーアーカイブで子カテゴリを持つかどうか判定する

WordPressデザインワークブックを片手にWP講座に参加してくださった方から、カテゴリが子カテゴリを持つ場合には、子カテゴリの一覧を表示し、持たない場合には通常の投稿一覧を表示したい、という質問をうけました。ついでなので、ブログでコードを共有したいと思います。

category.php

<?php
//現在のカテゴリが子カテゴリを持つかどうか判定する
$children = get_category_children($cat);

//子カテゴリを持つなら、子孫カテゴリのリンクリストを表示
if ($children) : ?>
  <ul>
  	<?php wp_list_categories('title_li=&child_of='.$cat); ?>
  </ul>
<?php 
//子カテゴリを持たないなら、タイトルリンクを表示
else: ?>
	<ul>
		<?php while(have_posts()) : the_post(); ?>
			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>
	</ul>
<?php endif; ?>

解説

$catはWordPressのグローバル変数で、通常、現在のカテゴリIDが入ります。var_dumpで、変数$catの出力結果をみてみましょう。カテゴリIDが、取得されていることを確認できます。

var_dump($cat);

次に、get_category_childrenは子カテゴリを取得するwordpressの関数です。引数に現在のカテゴリID「$cat」を入れます。

//現在のカテゴリが子カテゴリを持つかどうか判定する
$children = get_category_children($cat);
var_dump($children);

var_dumpで、変数$childrenの出力結果をみてみましょう。

すると、子カテゴリを持つ親カテゴリでは、「string(6) “/17/19″」のように子カテゴリIDが出力され、それ以外の場合は、「string(0) “”」のように空になることがわかります

これを利用して、ifで条件分岐します。

<?php if ($children) : ?>
  子カテゴリを持つ場合
<?php else: ?>
  子カテゴリを持たない場合
<?php endif; ?>

子カテゴリを持つなら、wp_list_categoriesで、リンクリストを出力し、子カテゴリを持たないならば、通常のループで投稿一覧を出力します。

最初、かなり昔にWordPress関連で、親カテゴリに属する子カテゴリ一覧を表示するという記事を書いていたので、これを参考にしてくださったようなのですが、この記事では、親が子を持つかどうかは判定していないので、ちょっと違ってます。(むしろ、親でも親でなくても同じものを表示させたかったので、子を持つかどうかの判定が不要だった。)でも、使っているテンプレートタグはほとんど同じで、あとは組み合わせ方ですね。こっちの方が、簡単な感じです。

2 Responses to “カテゴリーアーカイブで子カテゴリを持つかどうか判定する”

  1. 西山 より:

    すみません質問です!
    コチラの記事を参考にさせていただいております。

    子カテゴリの一覧を表示する所で、
    何階層もあるカテゴリの場合、全階層の子カテゴリが表示されてしまうのですが、
    1つ下のカテゴリのみ表示する方法はございますか?

    もしわかりましたら教えていただけますと幸いです。
    どうぞよろしくお願いいたしますm(_ _)m

  2. コモモ コモモ より:

    忙しくてお返事できなくてごめんなさい。1つ下のカテゴリだけを表示したい場合は、wp_list_categoriesのパラメータにdepthを追加します。

    wp_list_categories(‘depth=1&title_li=&child_of=’.$cat);

    他にも様々なパラメータがありますので、困った時はCodexを参考にしてみてください。

コメントを残す

人気の記事