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

吉永 2020年3月26日

カテゴリが子カテゴリを持つ場合には、子カテゴリの一覧を表示し、持たない場合には通常の投稿一覧を表示したい、という質問をうけました。ついでなので、ブログでコードを共有したいと思います。

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構築
イラストのタグ