2026年7月21日

2026年7月21日

WordPressテンプレートパーツの「エリア」とは:theme.jsonでの指定と独自エリアの追加

ブロックテーマのテンプレートパーツ(ヘッダーやフッターなどの部品)には、それぞれ「エリア(area)」という分類が付いています。エリアは、サイトエディターでの分類や、出力時に使われる HTML タグ(<header>・<footer> など)を決める設定です。

なお、WP_Template_Part_Area というクラスや wp_template_part_area() という関数は WordPress にはありません。この記事では、実際の仕組みである theme.json の templateParts と、エリアを追加する default_wp_template_part_areas フィルターを使った方法を説明します。動作は WordPress 6.9 で確認しています(2026年10月時点)。

標準のエリアは3種類

WordPress 本体が定義しているエリアは次の3つです(get_allowed_block_template_part_areas() が返す値)。

エリア(area) 画面での名前 出力時のタグ 用途
header Header(ヘッダー) <header> サイト名、ロゴ、メインメニューなど
footer Footer(フッター) <footer> 著作権表示、SNS リンクなど
uncategorized General(一般) <div> 上記以外の部品

エリアの主な役割は次のとおりです。

  • サイトエディターでテンプレートパーツを一覧するときの分類になる
  • テンプレートパーツブロックを出力するときの外側のタグになる(ブロック側で tagName を指定した場合はそちらが優先)
  • 同じエリアのテンプレートパーツどうしで、エディター上で差し替えの候補として表示される

theme.jsonでエリアを指定する

テーマに同梱するテンプレートパーツは、テーマの parts フォルダーに HTML ファイルとして置き、theme.json の templateParts でエリアを指定します。

my-theme/
├── style.css
├── theme.json
├── templates/
│   └── index.html
└── parts/
    ├── header.html
    ├── footer.html
    └── sidebar.html
{
	"$schema": "https://schemas.wp.org/trunk/theme.json",
	"version": 3,
	"templateParts": [
		{ "name": "header", "title": "Header", "area": "header" },
		{ "name": "footer", "title": "Footer", "area": "footer" },
		{ "name": "sidebar", "title": "Sidebar", "area": "uncategorized" }
	]
}
  • name: parts フォルダー内のファイル名(拡張子 .html を除いたもの)
  • title: サイトエディターに表示される名前
  • area: エリア。省略した場合や、登録されていない値を書いた場合は uncategorized として扱われます

登録されていないエリア名(たとえば banner)を書くと、WordPress は「サポートされていないエリアなので uncategorized として追加した」という趣旨の警告を出し、uncategorized に置き換えます。WP_DEBUG を有効にした開発環境では、この警告で書き間違いに気付けます。

テンプレートからテンプレートパーツを呼び出す

テンプレート(templates/index.html など)では、テンプレートパーツブロックで部品を読み込みます。

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

<!-- wp:group {"tagName":"main"} -->
<main class="wp-block-group">
	<!-- wp:post-content /-->
</main>
<!-- /wp:group -->

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

slug は parts フォルダーのファイル名です。出力時のタグは、ブロックに書いた area 属性ではなく、テンプレートパーツ自体に設定されたエリア(theme.json の指定)で決まります。上の例のヘッダーは次のように出力されます。

<header class="wp-block-template-part">…</header>

外側のタグをエリアと別のものにしたい場合は、ブロックに "tagName":"div" のように指定します。

独自のエリアを追加する

サイドバーやお知らせ帯など、標準の3種類に当てはまらない部品を分類したいときは、default_wp_template_part_areas フィルターでエリアを追加します。テーマの functions.php か、プラグインに書きます。

<?php
add_filter(
	'default_wp_template_part_areas',
	function ( array $areas ) {
		$areas[] = array(
			'area'        => 'sidebar',
			'area_tag'    => 'aside',
			'label'       => __( 'Sidebar', 'my-theme' ),
			'description' => __( 'サイドバーに表示するテンプレートパーツです。', 'my-theme' ),
			'icon'        => 'sidebar',
		);
		return $areas;
	}
);
キー 内容
area エリアの識別名。theme.json の area に書く値
area_tag 出力時の外側のタグ
label サイトエディターでの表示名
description エリアの説明文
icon エディターで使うアイコン名。本体の標準エリアは layout・header・footer を使っています

フィルターを追加したら、theme.json 側でもエリアを書き換えます。

{ "name": "sidebar", "title": "Sidebar", "area": "sidebar" }

これで sidebar のテンプレートパーツは <aside class="wp-block-template-part">…</aside> として出力され、エディターでもサイドバーのエリアとして分類されます。フィルターを外すと、sidebar は登録されていないエリアになり、再び uncategorized 扱い(<div> で出力)に戻ります。テーマを配布する場合は、フィルターと theme.json をセットで管理してください。

PHPからエリアを確認する

登録されているエリアや、各テンプレートパーツのエリアは次のように確認できます。WP-CLI の wp eval-file などで実行すると、テーマを作っている途中の確認に使えます。

<?php
// 登録されているエリアの一覧
foreach ( get_allowed_block_template_part_areas() as $area ) {
	echo $area['area'] . ' => <' . $area['area_tag'] . ">\n";
}

// 有効なテーマのテンプレートパーツと、そのエリア
foreach ( get_block_templates( array(), 'wp_template_part' ) as $part ) {
	echo $part->slug . ' : ' . $part->area . "\n";
}

// 特定のエリアのテンプレートパーツだけ
$sidebars = get_block_templates( array( 'area' => 'sidebar' ), 'wp_template_part' );

サイトエディターでの扱い

サイトエディターでテンプレートパーツを新しく作るときは、名前と一緒にエリアを選びます。作成済みのテンプレートパーツは、エリアごとに分類されて一覧に表示されます。独自エリアを追加した場合も、選択肢と分類に加わります。

サイトエディターで編集したテンプレートパーツはデータベースに保存され、テーマのファイルより優先されます。theme.json でエリアを変えたのに反映されない場合は、エディターで編集済みのものが残っていないかを確認し、必要ならカスタマイズをリセットしてください。

クラシックテーマのget_template_partとの違い

クラシックテーマで使う get_template_part( 'template-parts/header' ) は、PHP ファイルを読み込む関数で、エリアの仕組みとは関係ありません。クラシックテーマの PHP テンプレートからブロックのテンプレートパーツを表示したい場合は、block_template_part( 'header' ) を使うと、parts/header.html のブロックを出力できます。

まとめ

  • テンプレートパーツのエリアは header・footer・uncategorized の3種類が標準。
  • エリアは theme.json の templateParts で、ファイル名(name)ごとに指定する。
  • 出力時のタグは、テンプレートパーツのエリアの area_tag で決まる(ブロックの tagName で上書き可能)。
  • 独自のエリアは default_wp_template_part_areas フィルターで追加し、theme.json 側の area と合わせる。
  • 登録されていないエリア名は uncategorized として扱われる。

関連記事:

お気軽にご相談ください

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