2025年07月26日[土曜日]

カテゴリーごとにページを分ける!実用的なサイト構築テクニック

  • 2025/07/25
  • BASICS
  • WordPressの基礎
  • 0comments
  • 41views
  • 約7分で読めます
  • 30

前回の記事では、get_categories()を使って投稿をカテゴリー順に並べる方法を学習しました。しかし、すべてのカテゴリーの投稿を1つのページに表示すると、投稿数が増えた時に見づらくなってしまいます。

今回は、より実用的なアプローチとして「カテゴリーごとに個別のページを作成する」方法を詳しく解説します。この方法により、ユーザーは興味のあるカテゴリーだけを効率的に閲覧できるようになります。

今回の目標

  • カテゴリーベースのパーマリンク設定をマスターする
  • page-news.phpでカテゴリー一覧を表示する
  • category.phpでカテゴリー別投稿一覧を作成する
  • カテゴリーページのタイトル表示を最適化する

パーマリンク設定の確認と変更

カテゴリーページを作成するには、まずWordPressの管理画面でパーマリンク設定を確認・変更する必要があります。

管理画面での設定確認

まず、管理画面の設定パーマリンクにアクセスしましょう。

現在の設定を確認すると

  • カスタム構造: /%news%/%post_id%
  • カテゴリーベース: 空欄

になっていることが確認できます。

この設定により、投稿の個別ページは http://sample.local/news/123 のようなURLになっています。

カテゴリーベースの設定変更

カテゴリーページを作成するため、同じパーマリンク設定画面でカテゴリーベースを設定します。

  1. カテゴリーベースの入力欄に news/category を入力
  2. 変更を保存をクリック(重要!)

この設定により、カテゴリーページのURLが以下のようになります。

http://sample.local/news/category/カテゴリースラッグ

URL構造の再確認

URL構造を整理します。

URL用途テンプレート
http://sample.local/newsお知らせ固定ページpage-news.php
http://sample.local/news/category/xxxカテゴリー一覧ページcategory.php
http://sample.local/news/123投稿個別ページsingle.php

カテゴリー一覧の表示

現状ではお知らせページに投稿一覧が表示されています。

  • お知らせページは、カテゴリーの一覧
  • カテゴリーページは、カテゴリーに該当する投稿一覧
  • 個別の投稿ページ

の構造に変更します。

まずは、お知らせページのテンプレート page-news.php を編集して、カテゴリー一覧を表示します。

<?php get_header();?>

<?php the_content(); ?>

<?php
// カテゴリー一覧を取得
$categories = get_categories([
    'hide_empty' => true, // 投稿がないカテゴリーは除外
]);

echo '<ul class="category-list">' . PHP_EOL;

// カテゴリーごとにループ
foreach ($categories as $category) {
    echo '<li><a href="'.get_term_link($category->term_id).'">'.$category->name.'</a></li>' . PHP_EOL;
}

echo '</ul>' . PHP_EOL;
?>

<p>※このページは page-news.php テンプレートで表示されています</p>

<?php get_footer();?>

コードのポイント解説

get_categories()でカテゴリー一覧を取得

前回の記事で学習したように get_categories は、カテゴリー一覧を取得する関数です。hide_empty => trueを指定することにより、投稿がないカテゴリーは表示対象から除外されます。

$categories = get_categories([
    'hide_empty' => true, // 投稿がないカテゴリーは除外
]);

get_term_link()でカテゴリーページのURLを取得

get_term_link()関数は、先ほど設定したパーマリンク設定のカテゴリーベースに基づいてURLを自動生成します。

foreach ($categories as $category) {
    echo '<li><a href="'.get_term_link($category->term_id).'">'.$category->name.'</a></li>' . PHP_EOL;
}

WordPressの「ターム」について

ここで重要な概念として「ターム(term」について説明します。WordPressでは、カテゴリーやタグなどの分類項目を総称して「ターム」と呼びます。

  • カテゴリー → ターム
  • タグ → ターム

つまり、「カテゴリー」も「タグ」も、どちらもWordPressでは「ターム」という扱いになります。そのため、カテゴリーに関する関数名にも「term」という言葉が使われています。

表示結果の確認

ブラウザで http://sample.local/news にアクセスすると、カテゴリー一覧がリンク付きで表示されます。

カテゴリー別投稿一覧の作成

次に、カテゴリーページのテンプレート category.php を新規作成します。

<?php get_header();?>

<?php
// 現在表示中のカテゴリー情報を取得
$target = get_queried_object();

// そのカテゴリーに属する投稿を取得
$args = [
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'title',
    'order' => 'asc',
    'category__in' => [$target->term_id],
];

$query = new WP_Query($args);

echo '<ul class="post-list">' . PHP_EOL;

while ($query->have_posts()) {
    $query->the_post();
    
    echo '<li>'.
        '<span class="date">'.get_the_date('Y年m月d日').'</span>'.
        '<a href="'.get_the_permalink($post->ID).'">'.get_the_title($post->ID).'</a>'.
        '</li>'.PHP_EOL;
}

wp_reset_postdata(); // 投稿データをリセット

echo '</ul>' . PHP_EOL;
?>

<p>※このページは category.php テンプレートで表示されています</p>

<?php get_footer();?>

コードの重要ポイント

get_queried_object()で現在のカテゴリー情報を取得

category.phpでは、get_queried_object()で現在表示中のカテゴリー情報が取得できます。

$target = get_queried_object();

この関数は以下のような情報を取得できます。

  • term_id: ターム ID
  • name: ターム名
  • slug: スラッグ
  • description: 説明
  • parent: 親タームの ID(0なら親なし)
  • count: このタームに属する投稿の数

カテゴリーの指定

get_queried_object()はタームIDもスラッグも取得できます。よってカテゴリーの指定は、IDでもスラッグでも可能です。

'category__in' => [$target->term_id],
'category_name' => $target->slug,

表示結果の確認

カテゴリー一覧のリンクをクリックすると、該当するカテゴリーの投稿一覧が表示されます。

タイトル表示の最適化

カテゴリーページにアクセスした時、ページタイトル(h1要素)に最初の投稿のタイトルが表示されてしまう問题があります。

例:http://sample.local/news/category/web-sns にアクセスすると → 「SNS総フォロー100人を達成しました」(最初の投稿タイトル)が表示される

これを「Web/SNSのお知らせ」のように適切なタイトルに変更しましょう。

header.phpの修正

現在のタイトル表示部分

<?php if (!is_front_page()) : ?>
    <h1 class="page-title"><?php the_title(); ?></h1>
<?php endif; ?>

ここで!is_front_page()としている理由をおさらいしましょう。

フロントページ(トップページ)では、headerタグ内にあるサイト名がh1要素として表示されているため、mainタグ内には別のh1要素を表示しません。これによりSEO的に適切な1ページ1つのh1構造を維持しています。

これを以下のように修正します。

<?php
if (is_category()) {
    $category = get_queried_object();
    echo '<h1 class="page-title">'.$category->name.'のお知らせ</h1>'.PHP_EOL;
} elseif (!is_front_page()) {
    echo '<h1 class="page-title">'. get_the_title() .'</h1>'.PHP_EOL;
}
?>

コードの解説

is_category()でカテゴリーページかどうかを判定

if (is_category()) {
    // カテゴリーページの場合の処理
}

カテゴリー名を使ったタイトル表示

get_queried_objectnameで現在表示中のカテゴリー名を取得できます。

$category = get_queried_object();
echo '<h1 class="page-title">'.$category->name.'のお知らせ</h1>'.PHP_EOL;

これにより、「Web/SNS」カテゴリーなら「Web/SNSのお知らせ」というタイトルが表示されます。

タイトル表示の確認

各カテゴリーページにアクセスして、適切なタイトルが表示されることを確認しましょう。

まとめ

今回の記事では、WordPressでカテゴリーごとに個別のページを作成する実装方法を学習しました。

学習した内容

  • パーマリンク設定: カテゴリーベースの設定とURL構造の理解
  • page-news.php: get_categories()get_term_link()を使ったカテゴリー一覧表示
  • category.php: get_queried_object()を使ったカテゴリー別投稿一覧
  • タイトル最適化: is_category()を使った条件分岐によるタイトル表示

実装の流れ

  1. パーマリンク設定でカテゴリーベースを設定
  2. お知らせページでカテゴリー一覧を表示
  3. カテゴリーページで該当投稿の一覧を表示
  4. ページタイトルの表示を最適化

この実装により、ユーザーは興味のあるカテゴリーだけを効率的に閲覧できるようになり、大量の投稿があっても使いやすいWebサイトを構築できます。

さらに、勘の良い方はお気づきかもしれませんが、この手法は「お知らせ」以外にも幅広く応用できます。

例えば

  • 商品一覧サイト: 投稿を商品として使い、カテゴリー別に「家電」「衣類」「雑貨」などの商品一覧を表示
  • 飲食店のメニューサイト: 投稿をメニューアイテムとして使い、「前菜」「メイン」「デザート」などのカテゴリー別メニューを表示
  • ポートフォリオサイト: 投稿を作品として使い、「Webデザイン」「グラフィック」「写真」などのカテゴリー別作品集を表示

に活用することができます。

つまり、WordPressの投稿機能とカテゴリー機能を組み合わせることで、様々な種類のコンテンツを効率的に分類・表示できる汎用的なシステムが構築できるのです。

次回予告

次回は、さらに細かい分類としてタグ機能の活用について詳しく解説します。

  • お知らせページpage-news.phpにタグ一覧を表示
  • tag.phpにタグに該当する投稿の一覧を表示
  • カテゴリーとタグの使い分けのベストプラクティス

基本的な考え方はカテゴリーと同じですが、タグならではの特徴や実用的な活用方法についても詳しく解説します。お楽しみに!

成果物

この記事で作成した成果物は、以下のページでまとめて確認することができます。

成果物をまとめて確認する

この記事の評価をお願いします

評価をすると「既読」となり、まだ読んでいない記事を区別できます。

この投稿をシェアする

コメントを残す

CAPTCHA



カテゴリー順で並べる!WP_Query応用テクニック

カテゴリー順で並べる!WP_Query応用テクニック  BASICS

WordPressの標準機能では直接カテゴリー順に投稿を並べることができませんが、カテゴリー一覧を取得してループ処理を組み合わせることで実現できます。複数のカテゴリーを含む投稿一覧を、カテゴリー順に並べて表示する実践的なテクニックを詳しく解説します。

  • 2025/07/24
  • 0comments
  • 39views

WordPressでタグ機能を活用!投稿をさらに細かく分類する実装テクニック

WordPressでタグ機能を活用!投稿をさらに細かく分類する実装テクニック  BASICS

WordPressのタグ機能を使った投稿分類システムの実装テクニックを詳しく解説。タグ一覧の表示方法、タグ別投稿一覧ページの作成、カテゴリーとの使い分け方法まで、実践的なコード例とともに学べる内容です。

  • 2025/07/25
  • 0comments
  • 21views

STAY CONNECTED

wp-ch Admin

現役のフリーランスエンジニアがWordPressによるWebサイト構築を基礎から実践テクニックまで徹底解説します。

たくさんの方がフォローしてくれています。あなたもぜひ、情報を受け取ってください。

STORY|ストーリー

WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。

学習ストーリー第31話まで掲載中

全ストーリーを見る

TAGS|タグ