2026年6月2日

2026年6月2日

WordPressのフルサイト編集でアーカイブテンプレートを作成する方法

ブロックテーマでカテゴリーやタグ、投稿者などの一覧ページの見た目を変えるには、templates/ に archive.html や category.html といったアーカイブテンプレートを作り、その中にクエリーループブロックを置きます。ポイントは、クエリーループに「テンプレートのクエリーを引き継ぐ」設定を使い、表示する記事の絞り込みはWordPress本体に任せることです。この記事では、テンプレートの作り方(サイトエディターとファイルの両方)、どのアーカイブにどのテンプレートが使われるか、1ページの表示件数の変え方、カスタム投稿タイプのアーカイブ、表示されないときの確認点までを説明します。

どのアーカイブにどのテンプレートが使われるか

ブロックテーマでも、使われるテンプレートはクラシックテーマと同じテンプレート階層で決まります。違いは、ファイルが templates/ フォルダ内の .html になることです。代表的な対応は次のとおりです。

  • カテゴリー一覧:category-{スラッグ}.html → category.html → archive.html → index.html
  • タグ一覧:tag-{スラッグ}.html → tag.html → archive.html → index.html
  • 投稿者一覧:author-{ユーザー名}.html → author.html → archive.html → index.html
  • 日付アーカイブ:date.html → archive.html → index.html
  • カスタムタクソノミー:taxonomy-{タクソノミー}-{ターム}.html → taxonomy-{タクソノミー}.html → taxonomy.html → archive.html → index.html
  • カスタム投稿タイプ:archive-{投稿タイプ}.html → archive.html → index.html

左にあるものほど優先されます。まず archive.html を1つ作ってアーカイブ全体の共通デザインにし、カテゴリーだけ説明文を出したい、特定のカテゴリーだけレイアウトを変えたい、といった必要が出たら、より具体的なテンプレートを追加していくと管理しやすくなります。

なお、ブログのトップ(投稿一覧)は home.html、検索結果は search.html で、厳密にはアーカイブとは別のテンプレートです。

作業前の準備

  • 子テーマで作業する:配布テーマを直接編集すると、更新で変更が消えます。ブロックテーマの子テーマに templates/archive.html を置けば、親テーマの同名テンプレートより優先されます。
  • バックアップとステージング:テンプレートの記述ミスで一覧が空になることがあります。変更前にバックアップを取り、ステージング環境で確認してから本番に反映してください。
  • 既存のテンプレートを確認する:多くのブロックテーマには archive.html がすでに入っています。新規に作る前に、親テーマの templates/ を見て、何が用意されているかを把握しておきます。

サイトエディターで作る

コードを書かずに作る場合は、サイトエディターを使います。

  1. 「外観」→「エディター」を開き、テンプレートの一覧に進む
  2. 新しいテンプレートを追加する操作を選ぶ
  3. 「すべてのアーカイブ」「カテゴリー」「タグ」「投稿者」など、対象の種類を選ぶ(カテゴリーなどは、特定のタームだけのテンプレートも選べます)
  4. 表示されたパターンから選ぶか、空の状態から組み立てる
  5. クエリーループの設定を確認して保存する

メニューや選択肢の表記はWordPressのバージョンによって変わります(2026年10月現在)。名前が多少違っても、「テンプレートを追加」から種類を選ぶ流れは共通です。

サイトエディターで保存したテンプレートは、テーマのファイルではなくデータベース(投稿タイプ wp_template)に保存され、同じ名前のファイルより優先されます。後からファイルを直しても反映されないときは、このデータベース側の版をリセットする必要があります。変更をファイルとして残したい場合は、WordPress.org で配布されている Create Block Theme プラグインでテーマに書き出せます。

ファイルで作る

テーマのファイルとして管理したい場合は、子テーマの templates/archive.html に次のように書きます。ヘッダーとフッターはテンプレートパーツで読み込み、中央にアーカイブのタイトル、説明、記事一覧、ページ送りを置いた構成です。

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
<!-- wp:query-title {"type":"archive"} /-->
<!-- wp:term-description /-->

<!-- wp:query {"queryId":1,"query":{"inherit":true}} -->
<div class="wp-block-query">
<!-- wp:post-template -->
<!-- wp:post-featured-image {"isLink":true} /-->
<!-- wp:post-title {"isLink":true} /-->
<!-- wp:post-date /-->
<!-- wp:post-excerpt /-->
<!-- /wp:post-template -->

<!-- wp:query-pagination -->
<!-- wp:query-pagination-previous /-->
<!-- wp:query-pagination-numbers /-->
<!-- wp:query-pagination-next /-->
<!-- /wp:query-pagination -->

<!-- wp:query-no-results -->
<!-- wp:paragraph -->
<p>該当する記事はまだありません。</p>
<!-- /wp:paragraph -->
<!-- /wp:query-no-results -->
</div>
<!-- /wp:query -->
</main>
<!-- /wp:group -->

<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->

使っているブロックの役割は次のとおりです。

  • アーカイブタイトル(query-title):「カテゴリー: お知らせ」のように、見ているアーカイブの名前を出します。接頭辞の表示有無はブロックの設定で変えられます。
  • タームの説明(term-description):カテゴリーやタグの編集画面で入力した説明文を出します。説明が空なら何も出力されません。
  • クエリーループ(query)と投稿テンプレート(post-template):記事1件ぶんの見た目を投稿テンプレートの中に作ると、それが件数ぶん繰り返されます。
  • ページ送り(query-pagination 系):前へ・番号・次へのリンクです。
  • 結果なし(query-no-results):該当記事が0件のときだけ表示されます。

マークアップを手書きすると、属性と中身の食い違いでエディターに警告が出ることがあります。ファイルに保存した後、一度サイトエディターで開いて警告が出ないかを確認してください。

「テンプレートのクエリーを引き継ぐ」が要になる

上のコードの "query":{"inherit":true} が、アーカイブテンプレートで最も重要な設定です。これを有効にすると、クエリーループは独自の条件で記事を取りに行かず、今表示しているURLに対応するメインクエリー(カテゴリー一覧ならそのカテゴリーの記事)をそのまま使います。

エディターでは、クエリーループの設定パネルにある「テンプレートからクエリーを継承」や、クエリーの種類を「デフォルト」にする項目がこれに当たります(表記はバージョンにより異なります)。

この設定を切って、カテゴリーなどの条件を手動で指定してしまうと、次のような不具合が起きます。

  • どのカテゴリーを開いても同じ記事が並ぶ
  • 2ページ目以降に進んでも1ページ目と同じ記事が出る
  • ページ送りの数が実際の記事数と合わない

アーカイブテンプレートでは、継承を有効にしたまま、見た目だけを投稿テンプレート側で整えるのが基本です。サイドバーの「人気記事」のように、ページとは関係なく決まった記事を出したい場合にだけ、継承しない2つ目のクエリーループを使います。

1ページの表示件数を変える

継承したクエリーの件数は、「設定」→「表示設定」の「1ページに表示する最大投稿数」に従います。アーカイブの種類によって件数を変えたい場合は、子テーマの functions.php で pre_get_posts フックを使い、メインクエリーを調整します。

add_action( 'pre_get_posts', function ( $query ) {
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
	}
	if ( $query->is_category() ) {
		$query->set( 'posts_per_page', 12 );
	}
} );

is_admin() と is_main_query() の確認を入れないと、管理画面の一覧やウィジェットのクエリーまで変わってしまいます。クエリーループ側で件数を指定するのではなく、メインクエリーを変えるのは、ページ送りの計算をメインクエリーと一致させるためです。

カスタム投稿タイプのアーカイブ

カスタム投稿タイプの一覧ページ(例:/news/)を作るには、投稿タイプの登録時に has_archive を有効にしておく必要があります。

add_action( 'init', function () {
	register_post_type( 'news', array(
		'label'        => 'お知らせ',
		'public'       => true,
		'has_archive'  => true,
		'show_in_rest' => true,
		'supports'     => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
	) );
} );

登録は init フックで行います。has_archive を後から有効にした場合は、「設定」→「パーマリンク」を開いて保存し直し、リライトルールを更新してください。これをしないと一覧URLが404になります。テンプレートは templates/archive-news.html として作るか、サイトエディターでその投稿タイプのアーカイブを選んで作成します。show_in_rest を有効にしておくと、ブロックエディターで投稿を編集できます。

表示されないときの確認ポイント

  • 使われているテンプレートを確かめる:サイトエディターでテンプレートの一覧を見て、より優先度の高いテンプレート(category.html など)が別に存在していないかを確認します。
  • データベース側の版が優先されていないか:エディターで一度保存したテンプレートは、ファイルより優先されます。ファイルの変更が効かないときはリセットを試します。
  • 継承が有効か:どのアーカイブでも同じ記事が並ぶなら、クエリーループの継承設定を見直します。
  • パーマリンクの更新:カスタム投稿タイプの一覧が404なら、パーマリンク設定を保存し直します。
  • キャッシュ:ページキャッシュやCDNを使っている場合は、パージしてから確認します。

まとめ

  • アーカイブテンプレートは templates/archive.html を基本に、必要に応じて category.html などのより具体的なテンプレートを追加します。
  • クエリーループは「テンプレートのクエリーを引き継ぐ」設定を有効にし、記事の絞り込みとページ送りはWordPress本体に任せます。
  • 表示件数は pre_get_posts でメインクエリーを調整して変えます。
  • カスタム投稿タイプの一覧は has_archive を有効にし、パーマリンクを更新してから作ります。
  • サイトエディターで保存した版はファイルより優先されるため、反映されないときはまずそこを確認してください。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲