single.phpで複数のカテゴリーに登録されている場合に、所属するカテゴリーをすべて表示する(リンクなし、リンクあり)

今回は記事のタイトルまわりでよく使用される「その記事が所属するカテゴリー(ターム)を複数表示させる」方法についてです。
複数のカテゴリーに登録されている場合に使用できます。

目次

リンクなしの場合のコード

早速コードを書いていきます。
まずはリンクなしバージョンです。

<?php // タグ表示
  $cp_slug = esc_html(get_post_type_object(get_post_type())->name);
  if( $cp_slug == 'post_type' ): // ポストタイプ名
?>
  <div>
    <?php
      if ($terms = get_the_terms($post->ID, 'custom-post-taxonomy')) { //タクソノミー名
        foreach ( $terms as $term ) {
          echo '<span>' .$term->name. '</span>';
        }
      }
    ?>
  </div>
<?php endif; ?>

実際の出力は下記です。

<div>
  <span>所属ターム名</span>
  <span>所属ターム名</span>
  <span>所属ターム名</span>
</div>

複数のタームに所属していても、ちゃんとすべて表示されます。

リンクありの場合のコード

リンクありの場合は、もっと簡単に1行です。

<div>
  <?php echo get_the_term_list($post->ID, 'custom-post-taxonomy'); ?>
</div>

出力結果は下記です。

<div>
  <a href="xxx">所属ターム名</a>
  <a href="xxx">所属ターム名</a>
  <a href="xxx">所属ターム名</a>
</div>

リンクありで、aタグ内にclass名など追加したい場合

<?php // タグ表示
  $cp_slug = esc_html(get_post_type_object(get_post_type())->name);
  if($cp_slug=='post_type'):
?>
  <div>
    <?php
      $terms = get_the_terms($post->ID,'custom-post-taxonomy');
      foreach( $terms as $term ):
      $term_link = get_term_link( $term );
    ?>
      <a href="<?php echo $term_link; ?>" class="className"><?php echo $term->name; ?></a>
    <?php endforeach; ?>
  </div>
<?php endif; ?>

リンクありで、リストにしたい場合

<?php // タグ表示
  $cp_slug = esc_html(get_post_type_object(get_post_type())->name);
  if($cp_slug=='post_type'):
?>
  <ul>
    <?php
      $terms = get_the_terms($post->ID,'custom-post-taxonomy');
      foreach( $terms as $term ):
      $term_link = get_term_link( $term );
    ?>
      <li>
        <a href="<?php echo $term_link; ?>"><?php echo $term->name; ?></a>
      </li>
    <?php endforeach; ?>
  </ul>
<?php endif; ?>
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次