【WordPress】記事が無いカテゴリーも表示したい場合の出力方法!

今回はWordpressの投稿機能の、カテゴリー出力に関するお話。

WordPressでカテゴリー別に記事を出力する場合、カテゴリーに付随する記事が0件の時は、そのカテゴリーが一覧のラインナップに表示されません。

しかし、お客様の要望で「存在するカテゴリーはすべて表示させたい!」という場合もあるかもしれません。

そこで今回は、記事の有無に関わらず、管理画面上で作成したカテゴリーをすべてサイト上に出すための記述方法を解説していきます。

記事がないカテゴリー=表示されない?

まずは、カテゴリーを一覧で出力するための一般的なソースコードがこちら。

<?php
 $categories = get_categories($args);
 foreach ($categories as $category) : ?>
 <ul>
  <li><?php echo $category->name; ?></li>
 </ul>
<?php endforeach; ?>

上記の場合、記事が0件のカテゴリはサイト上に表示されません。

これは、「カテゴリーに紐づく記事が存在するとき、そのカテゴリを出力する」という前提だからですね。

記事があろうがなかろうがとにかく管理画面側に存在しているカテゴリーは全てサイト上にも出したい!となった場合、ここの記述をちょっと変えてあげればOKです。

”記事が存在しないとき”の条件を追加する

記事の有無に関わらずカテゴリーを一覧で出力するソースコードがこちら。

<?php
 $args = array(
            'hide_empty' => '0', //記事が0件の場合もタームを返す
        );
 $categories = get_categories($args);
 foreach ($categories as $category) : ?>
 <ul>
  <li><a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a></li>
 </ul>
<?php endforeach; ?>

2~4行目の

$args = array(
 'hide_empty' => '0',
);

この部分で、「記事が存在しないとき」の条件を追加しています。

もともと「’hide_empty’ => ‘1’」=「記事が1件もない場合はタームを返さない」がデフォルトとして定義されているので、これを0(false)にすることですべてのタームを返す命令に変わります。

【応用編】親カテゴリー+子カテゴリーの場合

さらに、子カテゴリーも存在し、親+子でカテゴリーをすべて出したい場合もこちらで応用できます。

<?php
 $args = array(
 'hide_empty' => '0', //記事が0件の場合もタームを返す
 'parent' => '0' //親カテゴリーとなるタームだけ返す
 );
 $categories = get_categories($args);
 foreach ($categories as $category) : ?>
   <ul>
      <li><a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a>
            //子カテゴリーの一覧取得
            <ul>
                <?php
                     $arr = array(
                       'hide_empty' => '0', //記事が0件の場合もタームを返す
                        'child_of' => $category->term_id, //属している親カテゴリー(ターム)を判別・取得
                    );
                    $childs = get_categories($arr);
                    if ($childs) :
                 ?>
                <?php foreach ($childs as $child) : ?>
                 <li><a href="<?php echo get_category_link($child->term_id); ?>"><?php echo $child->name; ?></a></li>
                <?php endforeach; ?>
          </ul>
   //子カテゴリーの一覧取得ここまで
          <?php endif; ?>
 </ul>
<?php endforeach; ?>

これで親カテゴリー、子カテゴリーともに記事の有無に関わらず、すべてのカテゴリーを出力することができます。

まとめ

  • カテゴリー別に記事を出力する場合、カテゴリーに付随する記事が0件の時は表示されないのがデフォルト
  • 記事の有無に関わらずカテゴリーをすべて表示させたいときは「‘hide_empty’ => ‘0’」の命令を追加する

いかがでしょうか。ぜひご活用ください。