【WordPress】特定のカテゴリー名をリンク付きで表示する方法|get_category_link・wp_list_categories

【WordPress】特定のカテゴリー名をリンク付きで表示する方法 WordPress

WordPressで特定のカテゴリー名を、そのカテゴリー一覧ページへのリンク付きで表示したいことがあります。カテゴリー情報を動的に取得して表示しておけば、カテゴリー名やスラッグを変更してもコードの修正が不要になるのが利点です。この記事では、用途別に複数の方法をエスケープ込みのコードで解説します。

この記事でわかること

  • wp_list_categories():複数カテゴリーをまとめてリンク一覧表示
  • get_category_link():1つのカテゴリーを自由なマークアップで表示
  • esc_url() / esc_html() による安全な出力
  • 応用:現在のアーカイブのカテゴリー名・投稿のカテゴリー表示
スポンサーリンク

方法1:wp_list_categories で複数カテゴリーを一覧表示する

指定したカテゴリーをまとめてリンク付きのリストで出すなら wp_list_categories() が手軽です。include に表示したいカテゴリーIDをカンマ区切りで指定します。

PHP:指定カテゴリーをリンク一覧で表示
<?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:特定カテゴリーをリンク付きで安全に表示
<?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:現在のカテゴリー名を表示
<?php single_cat_title('カテゴリー:'); // 前に文字を付けられる ?>

投稿に設定された全カテゴリーをリンク付きで表示

個別記事で、その投稿のカテゴリーをすべてリンク付きで出すなら the_category() が簡単です。引数で区切り文字を指定できます。

PHP:投稿のカテゴリーをリンク付きで表示
<?php the_category(', '); // 区切りはカンマ。リンクは自動で付く ?>
もっと詳しく
get_the_category() で配列として取得して自前でループする方法や、カスタムタクソノミー対応まで含めたカテゴリー取得の総まとめは記事のカテゴリーを取得する方法(完全ガイド)、区切り文字を細かく指定する表示はカテゴリーやタグの一覧を指定した区切り文字で表示する方法、カテゴリー数の取得はカテゴリーの数を取得する方法を参照してください。

よくある質問(FAQ)

Q記事に設定された複数のカテゴリーをまとめて表示するには?
Athe_category(', ') でリンク付きリストを出力できます(引数は区切り文字)。文字列として受け取りたい場合は echo get_the_category_list(' / ');、配列で扱いたい場合は get_the_category() で WP_Term の配列を取得して foreach でループします。
Q特定のカテゴリーを除外して一覧表示するには?
Awp_list_categories()exclude に除外したいIDを指定します。投稿のカテゴリーから除外する場合は get_the_category() を取得してからarray_filter()term_id を除くとよいでしょう。
Qカテゴリーのリンク先URLだけを取得するには?
Aget_category_link($cat_id) または get_term_link($term) でURLを取得できます。カテゴリーオブジェクト(WP_Term)には term_idnameslugdescription などのプロパティがあります。出力時は 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 を忘れずに実装しましょう。