WordPress
WordPressの投稿が属するカテゴリーとタグをそれぞれ分けて取得する方法
WordPressで記事一覧を表示する際や、記事の詳細ページに、その記事が属するカテゴリーやタグを表示したいという場合があると思います。
その時に、それぞれ分けて取得し、カテゴリーはカテゴリーの見た目で、タグはタグの見た目で表示するという方法をご紹介します。
カテゴリーとタグとは?
カテゴリーもタグも、カスタム投稿タイプにおいてはカスタムタクソノミーの1種です。ここでは、news
というカスタム投稿タイプがあり、news_cat
というカスタムタクソノミーと、news_tag
というカスタムタクソノミーがある場合に、それぞれ分けて取得する方法をご紹介します。
カテゴリーとタグについてはややこしいので、よくご存じでない方は次の記事を参照ください。
カテゴリー、タグ、タクソノミー、タームの違いについてどこよりも分かりやすい解説を試みる
カテゴリーとタグをそれぞれ分けて取得するとは?実施内容について
例えば表示内容としては次のように、記事ごとにカテゴリーとタグを示すということをします。
利用する関数「wp_get_object_terms」
利用する関数は「wp_get_object_terms」です。
<?php wp_get_object_terms( 投稿ID, タクソノミー名, $args ); ?>
コード例
以下の記述で、
カテゴリーは
<span class="cat">カテゴリー名</span>
タグは
<span class="tag">タグ名</span>
で記事ごとに表示されるので、CSSでカテゴリーとタグを見え方を分けて表示ができます。
<?php
$args = array(
'post_type' => 'news',
'orderby' => 'date',
'order' => 'DESC'
);
global $post;
$the_query = new WP_Query($args);
if ($the_query->have_posts()): ?>
<ul class="topic-inner">
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<li>
<h3><?php the_title($post->ID); ?></h3>
<p class="cats_tags">
<?php
$terms = wp_get_object_terms($post->ID,'news_cat');
foreach( $terms as $term):echo '<span class="cat">' . $term->name . '</span>';endforeach;
$terms = wp_get_object_terms($post->ID,'news_tag');
foreach( $terms as $term):echo '<span class="tag">' . $term->name . '</span>';endforeach;
?>
</p>
</li>
<?php endwhile; endif; wp_reset_postdata(); ?>
</ul>
カテゴリーとタグの使い分けについて
デフォルトの投稿タイプだと、カテゴリーは階層を持たせることができるのに対して、タグは階層を持たせることができないという違いがあります。
カスタム投稿タイプでは、そこは設定次第なので、実質的には変わりません。
例えば食品のリストがあった時に、産地を都道府県別にカテゴリーで分けて、出荷時期をタグで分けるというような使い方ができます。
SEOのことを踏まえて考えるべきカテゴリーとタグの使い方
カテゴリーは、基本的に1記事1つにすることを推奨します。1記事に複数のカテゴリーを付けても、パンくずリストではどちらかのカテゴリーが表示されてしまうということがあります。また、URLにカテゴリー名を表示させている場合も同様です。URLにカテゴリー名を表示させている場合には、カテゴリーを変えるとURLが変わってしまうということも起きてしまいます。
カテゴリーもタグも、付ければ付けるほど、taxonomyページが増えているということを把握しておくべきです。低品質なページになりがちなので、noindexをつけるという対処もありますが、SEOのことを考えながらタグの付けるのは難しいものです。
制作者がSEOのプロでないと、制御が効かなくなるため当方は基本的にタグの利用は推奨していません。
よく、タグをたくさんつけておくとサイトの回遊率が高くなるためSEO的にも良いということを言っている記事を見ますが、無暗にタグが付けられたブログは、むしろ回遊率は悪くなるのではないかと考えています。
ユーザーのエンゲージメントを高めたければ、ユーザビリティの向上を念頭に置くべきです。そう考えれば、タグを無暗に付けるという選択肢にはならないはずです。
まとめ
カテゴリーとタグを分けて表示する方法をご紹介しました。