成果物をまとめて確認する
[成果物]WordPressアーカイブページの統合管理!archive.phpで効率的なテンプレート設計
【WordPressアーカイブページの統合管理!archive.phpで効率的なテンプレート設計】の成果物です。投稿の学びを終えた時点の構成を一覧でご確認いただけます。
前回の記事では、WordPressの日付別アーカイブ機能を使って、時系列での投稿管理を学習しました。
これまでの学習で、カテゴリー用にcategory.php、タグ用にtag.php、日付用にdate.phpと個別のテンプレートファイルを作成してきました。しかし、これらのファイルを見比べてみると、コードの内容がほぼ同じであることに気づくはずです。
今回は、重複するコードを整理し、WordPressのテンプレート階層を活用してより効率的なアーカイブページ管理を実装します。
今回の目標
archive.php
の実装目次
これまでの学習で作成してきた「カテゴリーページ」「タグページ」「日付ページ」を、WordPressでは総称してアーカイブページと呼びます。
アーカイブページとは、複数の投稿を一覧表示するページのことです。具体的には以下のようなページが該当します:
WordPressでは、各アーカイブページに適用されるテンプレートファイルの優先順位が決まっています。
category-スラッグ.php
category-ID.php
category.php
archive.php
tag-スラッグ.php
tag-ID.php
tag.php
archive.php
date.php
archive.php
注目していただきたいのは、すべてのアーカイブページで最終的にarchive.phpが共通して使われることです。
つまり、専用のテンプレートファイル(category.php、tag.php、date.php)が存在しない場合、WordPressは自動的にarchive.phpを使用してページを表示します。
これまで作成した各テンプレートファイルのコードを確認してみましょう。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => [$category->term_id],
'orderby' => 'title',
'order' => 'asc',
];
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'tag__in' => [$tag->term_id],
'orderby' => 'title',
'order' => 'asc',
];
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
];
ご覧の通り、基本的な構造は同じで、検索条件の部分だけが異なります。投稿一覧の表示ロジックも全く同じです。
archive.phpを実装する前に、どのアーカイブページが表示されているかを判定する条件分岐関数を理解しましょう。
WordPressでは、現在表示されているページがどの種類のアーカイブページかを判定する関数が用意されています。
if (is_category()) {
// カテゴリーページでのみ実行される処理
} elseif (is_tag()) {
// タグページでのみ実行される処理
} elseif (is_date()) {
// 日付ページでのみ実行される処理
}
日付ページでは、さらに細かい単位での条件分岐が可能です。
if (is_year()) {
// 年別ページ(例:2025年)
} elseif (is_month()) {
// 月別ページ(例:2025年7月)
} elseif (is_day()) {
// 日別ページ(例:2025年7月15日)
}
これらの関数を組み合わせることで、1つのテンプレートファイル内で異なるページタイプに対応できます。
まず、これまで作成したテンプレートファイルを削除せずに残しておくため、ファイル名を変更します。
せっかく作成したファイルなので、学習の記録として残しておきましょう。
統合されたアーカイブテンプレートを作成します。
<?php get_header();?>
<?php
// 共通部の条件指定
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
];
// ページの種類に応じて抽出条件を追加
if (is_category()) {
// カテゴリーページの場合
$category = get_queried_object();
$args['category__in'] = [$category->term_id];
} elseif (is_tag()) {
// タグページの場合
$tag = get_queried_object();
$args['tag__in'] = [$tag->term_id];
} elseif (is_date()) {
// 日付ページの場合
if (is_year()) {
// 年の場合
$args['date_query'] = [
[
'year' => (int)get_query_var('year'),
]
];
} elseif (is_month()) {
// 年月の場合
$args['date_query'] = [
[
'year' => (int)get_query_var('year'),
'month' => (int)get_query_var('monthnum'),
]
];
} elseif (is_day()) {
// 年月日の場合
$args['date_query'] = [
[
'year' => (int)get_query_var('year'),
'month' => (int)get_query_var('monthnum'),
'day' => (int)get_query_var('day'),
]
];
}
}
// 投稿を取得
$query = new WP_Query($args);
echo '<ul class="post-list">' . PHP_EOL;
while ($query->have_posts()) {
$query->the_post();
// 投稿のカテゴリーを取得
$categories = get_the_category();
$category_name = !empty($categories) ? $categories[0]->name : '';
echo '<li>'.
'<span class="date">'.get_the_date('Y年m月d日').'</span>'.
'<span class="category">'.$category_name.'</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>※このページは archive.php テンプレートで表示されています</p>
<?php get_footer();?>
archive.phpを作成後、以下のページにアクセスして正常に動作することを確認してください。
すべてのページで以下の表示がされていることを確認してください:
※このページは archive.php テンプレートで表示されています
これまでは各ページで異なる表示でした。
今回の実装により、すべてのアーカイブページで同じarchive.phpテンプレートが使用されることが確認できます。これこそが今回の学習の核心部分です。
各ページで適切な投稿一覧が表示され、かつすべてで「archive.php」の表示がされていれば、テンプレート統合が成功しています。
今回の記事では、WordPressのテンプレート階層を活用してアーカイブページを統合管理する方法を学習しました。
is_category()
、is_tag()
、is_date()
でページタイプを判定機能 | 個別テンプレート | archive.php統合 |
---|---|---|
ファイル数 | 3個(category.php 、tag.php 、date.php ) | 1個(archive.php ) |
コード重複 | あり | なし |
保守性 | 低い(3箇所の修正が必要) | 高い(1箇所の修正で済む) |
WordPressの設計思想 | 部分的に準拠 | 完全に準拠 |
archive.phpによる統合管理を理解することで、WordPressのテンプレート設計がより効率的になります。この「1つのファイルで複数の機能を管理する」という考え方は、WordPressサイト構築において非常に重要な概念です。
今後より複雑なサイトを作る際にも、この統合的なテンプレート設計の考え方が活用できます。
これまでカテゴリーとタグの2つの分類方法を使ってきましたが、カテゴリーやタグとは別の切り口で投稿を分類したい場面が出てきます。
例えば、内容による分類(新店舗、イベント、休業など)」と「場所による分類(東京店、大阪店など)」や「部門による分類(営業部、技術部など)」といった全く異なる軸での分類が可能です。
次回は、独自の分類システム「タクソノミー」を使った新しい分類軸の作成方法をお楽しみに!
この記事で作成した成果物は、以下のページでまとめて確認することができます。
WordPressで日付別アーカイブ機能を実装する方法を詳しく解説します。月別・年別・日別での投稿一覧表示、パーマリンク設定の変更、時系列による投稿の絞り込み方法など、お知らせサイトなどで重要な日付管理機能の構築テクニックを実践的に学べる内容です。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第33話まで掲載中