WordPressで特定のカテゴリー名を、そのカテゴリー一覧ページへのリンク付きで表示したいことがあります。カテゴリー情報を動的に取得して表示しておけば、カテゴリー名やスラッグを変更してもコードの修正が不要になるのが利点です。この記事では、用途別に複数の方法をエスケープ込みのコードで解説します。
wp_list_categories():複数カテゴリーをまとめてリンク一覧表示get_category_link():1つのカテゴリーを自由なマークアップで表示esc_url()/esc_html()による安全な出力- 応用:現在のアーカイブのカテゴリー名・投稿のカテゴリー表示
方法1:wp_list_categories で複数カテゴリーを一覧表示する
指定したカテゴリーをまとめてリンク付きのリストで出すなら wp_list_categories() が手軽です。include に表示したいカテゴリーIDをカンマ区切りで指定します。
<?php $args = array( 'include' => '10,11,12', // 表示したいカテゴリーIDをカンマ区切りで指定 'title_li' => '', // 先頭の「カテゴリー」見出しを消す ); wp_list_categories($args); ?>
title_li => '' を入れないと、リストの先頭に「カテゴリー」という見出しが付きます。カテゴリーごとの記事数を出したい場合はカテゴリ一覧に記事数を表示する方法を参照してください。
方法2:get_category_link で1つを自由なマークアップで表示する
特定の1カテゴリーを、独自のHTMLやクラスを付けて表示したい場合は get_category() でカテゴリー情報を取得し、get_category_link() でリンク先URLを取得します。
URLは
esc_url()、テキストは esc_html() で囲んでから出力します。これは安全な出力の基本です。あわせて、カテゴリーが存在しない場合に備えて is_wp_error() でチェックしておくと安全です。<?php
$category_id = 10; // 表示したいカテゴリーID
$category = get_category($category_id);
if ($category && !is_wp_error($category)) : ?>
<a href="<?php echo esc_url(get_category_link($category->term_id)); ?>">
<?php echo esc_html($category->name); ?>
</a>
<?php endif; ?>
この方法なら、リンクに任意のクラスを付けたり、アイコンを添えたりと自由にカスタマイズできます。カテゴリー名だけが欲しい場合は get_cat_name($category_id) も使えます。
応用:現在のカテゴリー名・投稿のカテゴリーを表示する
固定IDではなく、表示中のページに応じて動的にカテゴリー名を出したい場面もあります。
カテゴリーアーカイブページで「現在のカテゴリー名」を表示
カテゴリーアーカイブのテンプレート(category.php など)では、single_cat_title() で現在のカテゴリー名を出せます。
<?php single_cat_title('カテゴリー:'); // 前に文字を付けられる ?>
投稿に設定された全カテゴリーをリンク付きで表示
個別記事で、その投稿のカテゴリーをすべてリンク付きで出すなら the_category() が簡単です。引数で区切り文字を指定できます。
<?php the_category(', '); // 区切りはカンマ。リンクは自動で付く ?>
get_the_category() で配列として取得して自前でループする方法や、カスタムタクソノミー対応まで含めたカテゴリー取得の総まとめは記事のカテゴリーを取得する方法(完全ガイド)、区切り文字を細かく指定する表示はカテゴリーやタグの一覧を指定した区切り文字で表示する方法、カテゴリー数の取得はカテゴリーの数を取得する方法を参照してください。よくある質問(FAQ)
the_category(', ') でリンク付きリストを出力できます(引数は区切り文字)。文字列として受け取りたい場合は echo get_the_category_list(' / ');、配列で扱いたい場合は get_the_category() で WP_Term の配列を取得して foreach でループします。wp_list_categories() の exclude に除外したいIDを指定します。投稿のカテゴリーから除外する場合は get_the_category() を取得してからarray_filter() で term_id を除くとよいでしょう。get_category_link($cat_id) または get_term_link($term) でURLを取得できます。カテゴリーオブジェクト(WP_Term)には term_id・name・slug・description などのプロパティがあります。出力時は esc_url() で囲みましょう。まとめ
- 複数まとめて:
wp_list_categories(array('include' => '…', 'title_li' => '')) - 1つを自由に:
get_category()+get_category_link()(esc_url/esc_html必須) - 現在のカテゴリー:
single_cat_title() - 投稿のカテゴリー:
the_category(', ')
動的にカテゴリーを取得しておけば、名前やスラッグの変更にも強くなります。出力時の esc_url / esc_html を忘れずに実装しましょう。

