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から、「この記事がどの投稿タイプか」(例: blog やnews )を調べます。 |
③ | $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行追加するだけで、すべてのテンプレートが自動的に対応してくれます。
カスタム投稿を頻繁に利用するサイトでは、ぜひこの「魔法の関数」を活用して、メンテナンスの手間を大幅に減らしてください。