【超簡単】カスタム投稿でも迷わない!記事の「カテゴリー」を自動で表示させる魔法の関数

web制作

WordPressで記事を作るとき、「お知らせ」や「スタッフブログ」のように、記事の種類(投稿タイプ)を分けている方は多いですよね。

しかし、記事の種類が増えるたびに、表示させる「カテゴリー」(タクソノミー)が変わってしまい、サイトのデザインを整えるのが面倒ではありませんか?

この記事で紹介する魔法の関数を使えば、その面倒な作業がすべてなくなります!通常のブログにも、カスタム投稿にも対応できる、あなたのサイトをスッキリさせる最強のツールです。


1. 魔法の関数:my_the_post_category()

この関数をWordPressのテーマファイル(functions.php)に一度貼り付けるだけで、あなたのブログ記事が「自分に合ったカテゴリー」を自動で判別し、表示するようになります。

functions.php に貼り付けるコード

PHP

/**
 * 記事の種類(投稿タイプ)に応じて、紐づくカテゴリーを自動で表示する関数
 *
 * @param bool $is_single trueなら個別記事用、falseなら一覧表示用の見た目を出力
 * @return void
 */
function my_the_post_category($is_single = false) {
    // ① 今見ている記事のIDを取る
    $post_id = get_the_ID();
    if (!$post_id) return;

    // ② 記事の種類(投稿タイプ)を調べる(例:post, blog, newsなど)
    $post_type = get_post_type($post_id);

    // ③ 【設定場所】記事の種類と「使うカテゴリー名」の対応表
    // ※ 新しい記事の種類を追加するときは、ここに1行足すだけでOK!
    $tax_map = [
        'post' => 'category',       // 通常のブログ記事 → ふつうのカテゴリーを使う
        'blog' => 'blog_category',  // スタッフブログ → blog_categoryを使う
        // 例: 'case' => 'case_category', // 事例 → case_categoryを使う
    ];

    // ④ この記事の種類が対応表にないなら、何も出さない
    if (!isset($tax_map[$post_type])) return;

    // ⑤ この記事の種類で使うカテゴリー名を取り出す
    $taxonomy = $tax_map[$post_type];

    // ⑥ その記事に設定されている「分類(カテゴリー)」を取得
    $terms = get_the_terms($post_id, $taxonomy);
    if (empty($terms) || is_wp_error($terms)) return;

    // ⑦ たくさんカテゴリーが付いていても、一番最初の一つだけを使う
    $term = $terms[0];

    // ⑧ カテゴリーのページへ飛ぶためのURL(リンク先)を作る
    $link = get_term_link($term);
    if (is_wp_error($link)) return;

    // ⑨ 見た目(HTML)を切り替えて出力
    if ($is_single) {
        // 個別記事ページ用:デザインのクラスを付けて表示
        echo '<a class="new-post__content--tag" href="' . esc_url($link) . '">' . esc_html($term->name) . '</a>';
    } else {
        // 一覧表示ページ用:別のデザイン(spanで囲む)で表示
        echo '<span class="blog__content--tag"><a href="' . esc_url($link) . '">' . esc_html($term->name) . '</a></span>';
    }
}

2. なぜこの関数が「魔法」なのか?仕組みを徹底解説 🛠️

この関数が何をしているのかを、コードの行番号に沿って解説します。ここを理解することで、あなたが今後カスタム投稿を追加するときも、迷うことなく対応できるようになります。

No.コードの処理このコードの目的役割
$post_id = get_the_ID();今見ている記事のIDを取得します。IDがなければ、処理をそこでストップします。
$post_type = get_post_type(...);取得したIDから、「この記事がどの投稿タイプか」(例: blognews)を調べます。
$tax_map = [...]ここが最も重要です。「記事の種類」と「使うカテゴリー名」のルールを定めています。新しい投稿タイプはここに追加します。
if (!isset(...)) return;投稿タイプがルール($tax_map)に登録されていなければ、何も出さないで終了します。
$taxonomy = $tax_map[$post_type];定めたルールに従い、この記事で使うべきカテゴリー名を確定させます。
$terms = get_the_terms(...);記事IDと確定したカテゴリー名を使って、その記事に付いている分類(ターム)を全て取得します。
$term = $terms[0];複数の分類が付いていても、今回は最初の1件だけを使うようにしています。
$link = get_term_link($term);取得したカテゴリー(ターム)のアーカイブページへのURLを作成します。
if ($is_single) ... else ...個別記事ページtrue)か一覧ページfalse)かによって、出力するHTMLの見た目を使い分けられるようにしています。

3. とても簡単な関数の使い方

この関数は、WordPressの「記事のループ」(記事を順番に表示している部分)の中であれば、どこでも使えます。

使い方 その1:一覧ページやトップページで使う

記事が複数並ぶ場所では、引数を省略するか、falseを指定します。

PHP

<?php 
    // ループ内(例: index.php, archive.php など)
    my_the_post_category(); // 一覧表示用のHTMLが出力される
?>

使い方 その2:個別ページで使う

一つの記事だけが表示される**個別ページ(single.phpなど)**で使います。

PHP

<?php 
    // 個別ページ(例: single.php)
    my_the_post_category(true); // 個別ページ用のHTMLが出力される
?>

4. まとめ:拡張性の高さが最大のメリット

このmy_the_post_category()関数を使う最大のメリットは、拡張性の高さにあります。

後から「導入事例」などの新しい記事の種類(カスタム投稿タイプ)を追加したくなっても、$tax_mapという対応表に1行追加するだけで、すべてのテンプレートが自動的に対応してくれます。

カスタム投稿を頻繁に利用するサイトでは、ぜひこの「魔法の関数」を活用して、メンテナンスの手間を大幅に減らしてください。

タイトルとURLをコピーしました