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として扱われる。
関連記事: