WordPress - カテゴリー・タグの出力方法

1. カテゴリー・タグの設定

カテゴリーやタグの設定や追加をするには **「管理画面 > 投稿 > カテゴリーまたはタグ」**から行います。追加だけなら投稿編集画面からでも可能ですが、カテゴリーやタグを日本語にした場合、スラッグ(URL に適した形式の名前)を半角小文字の英数字に変更するのを忘れないようにします。

2. カテゴリーの出力方法

ここで使用しているタグは下記の3つになります。

<?php the_category( $separator, $parents, $post_id ); ?>
現在の記事のカテゴリーアーカイブへのリンクを表示する。ループ内でのみ使用可能。

<?php get_the_category( $id ); ?>
カテゴリーの配列を返す。投稿 ID を渡すことでループ外でも使用可能。

<?php get_category_link( $category_id ); ?>
指定したカテゴリー ID のカテゴリーアーカイブへのリンクを返す。

リンクありカテゴリーをリスト形式で出力

<?php the_category(); ?>
<!--
<ul class="post-categories">
	<li><a href="xxx" rel="category tag">カテゴリー名</a></li>
</ul>
-->

ulpost-categoriesという class が付与され出力されます。

リンクありカテゴリーを出力

<?php the_category(' '); ?>
<!--
<a href="xxx" rel="category tag">カテゴリー名</a>
-->

シングルクウォートの間には半角スペースを入れています。入れていないとリスト形式で出力されます。

リンクなし先頭のカテゴリーを出力

<?php
$cat = get_the_category();
echo $cat[0]->name;
?>
<!--
カテゴリー名
-->

ただの文字列が出力されます。カテゴリーが複数登録されていても一つしか表示されません。

リンクあり先頭のカテゴリーを出力

<?php
$cat = get_the_category();
if ( $cat[0] ) {
echo '<a href="' . get_category_link( $cat[0]->term_id ) . '">' . $cat[0]->cat_name . '</a>';
}
?>
<!--
<a href="xxx">カテゴリー名</a>
-->

カテゴリーが複数登録されていても一つしか表示されません。

rel 属性なしリンクありカテゴリーを出力

<?php
$cats = get_the_category();
if ($cats) :
foreach ($cats as $cat) :
?>
<a href="<?php echo get_category_link( $cat->term_id ); ?>"><?php echo $cat->name; ?></a>
<?php endforeach; endif; ?>
<!--
<a href="xxx">カテゴリー名</a>
-->

foreach ( 配列 as 変数 ) { 繰り返される処理 }

出力されるものは、<?php the_category(' '); ?>とほぼ同じですが、こちらは、rel 属性が出力されないものです。

rel 属性 | HTML5 タグリファレンス

rel 属性なしリンクありカテゴリーをリスト形式で出力

<ul>
<?php
$cats = get_the_category();
if ($cats) :
foreach ($cats as $cat) :
?>
<li><a href="<?php echo get_category_link( $cat->term_id ); ?>"><?php echo $cat->name; ?></a></li>
<?php endforeach; endif; ?>
</ul>
<!--
<ul>
<li><a href="xxx">カテゴリー名</a></li>
</ul>
-->

PHP 内にまとめて書く書き方

<?php
$cats = get_the_category();
if ($cats) {
  echo '<ul>';
  foreach ( $cats as $cat ) {
    echo '<li><a href="' . get_category_link($cat->term_id) .'">' . $cat->name . '</a></li>';
}
  echo '</ul>';
}
?>

テンプレートタグ/the category
テンプレートタグ/get the tags
関数リファレンス/get tag link

3. タグの出力方法

ここで使用しているタグは下記の3つになります。

<?php the_tags( $before, $sep, $after ); ?>
現在の記事のタグアーカイブへのリンクを表示する。ループ内でのみ使用可能。

<?php get_the_tags( $id ); ?>
タグの配列を返す。投稿 ID を渡すことでループ外でも使用可能。

<?php get_tag_link($tag_id); ?>
指定したタグ ID のカテゴリーアーカイブへのリンクを返す。

文字付きリンクありタグを出力

<?php the_tags(); ?>
<!--
タグ: <a href="xxx" rel="tag">タグ名</a>
-->

日本語設定の場合、「タグ: 」という文字が先頭についてきます。英語や違う文字にしたい場合<?php the_tags( 'Tag: ' ); ?>のようにします。

文字なしリンクありタグを出力

<?php the_tags(''); ?>
<!--
<a href="xxx" rel="tag">タグ名</a>
-->

半角スペースなしでシングルクウォートのみでも大丈夫です。

リンクありタグをリスト形式で出力

<?php the_tags( '<ul><li>', '</li><li>', '</li></ul>' ); ?>
<!--
<ul><li><a href="xxx" rel="tag">タグ名</a></li></ul>
-->

リンクなし先頭のタグを出力

<?php
$tag = get_the_tags();
echo $tag[0]->name;
?>
<!--
タグ名
-->

ただの文字列が出力されます。タグが複数登録されていても一つしか表示されません。

リンクあり先頭のタグを出力

<?php
$tag = get_the_tags();
if ( $tag[0] ) {
echo '<a href="' . get_tag_link( $tag[0]->term_id ) . '">' . $tag[0]->name . '</a>';
}
?>
<!--
<a href="xxx">タグ名</a>
-->

タグが複数登録されていても一つしか表示されません。

rel 属性なしリンクありタグを出力

<?php
$tags = get_the_tags();
if ($tags) :
foreach ($tags as $tag) :
?>
<a href="<?php echo get_tag_link( $tag->term_id ); ?>"><?php echo $tag->name; ?></a>
<?php endforeach; endif; ?>
<!--
<a href="xxx">タグ名</a>
-->

rel 属性なしリンクありタグをリスト形式で出力

<ul>
<?php
$tags = get_the_tags();
if ($tags) :
foreach ($tags as $tag) :
?>
<li><a href="<?php echo get_tag_link( $tag->term_id ); ?>"><?php echo $tag->name; ?></a></li>
<?php endforeach; endif; ?>
</ul>
<!--
<ul>
<li><a href="xxx">タグ名</a></li>
</ul>
-->

テンプレートタグ/the tags
テンプレートタグ/get the tags
関数リファレンス/get tag link