ブロックテーマとtheme.json
は高い柔軟性を備えているため、子テーマはもはや不要に思えるかもしれません。しかし、子テーマは今でも重要な役割を果たします。
親テーマのコアファイルを直接編集せずにサイトのデザインを管理するために、子テーマが賢い選択肢であることに変わりはありません。
この記事では、Twenty Twenty-Fiveテーマをベースに、独自のstyle.css
を使ったブロック型の子テーマを作成する方法を解説します。さらに、functions.php
も使用します。スタイルを安全に上書きし、カスタムブロックスタイルを定義し、スタイルバリエーションを設定します。これは単なるスタイルの調整ではなく、自分だけのブロックテーマを構築するための確固たるステップです。
一見シンプルに思えるかもしれませんが、注意が必要なポイントもあります。カスタム子テーマを作成し、カスタムスタイルバリエーションを実装していきましょう。
ブロック子テーマの登録
ブロック子テーマの登録は、従来の子テーマの扱いより簡単です。
特別な登録手順はそもそも不要です。正しい名前のフォルダ内にtheme.json
とstyle.css
を配置すれば、自動で認識されます。
では、なぜstyle.css
が必要なのでしょうか。
子テーマフォルダには、WordPressがテーマを識別するためのヘッダー情報(名前や親テーマ名などのメタデータ)を含める必要があります。スタイルや設定はtheme.json
で管理されますが、style.css
はCSSが空でも認識に必須です。
/*
Theme Name: Twenty Twenty-Five Child
Description: Child theme for the Twenty Twenty-Five theme
Template: twentytwentyfive
*/
スクリプトを読み込む、PHP機能を追加するなどを行わない限り、functions.php
は不要です。
theme.json
の使い方については、「プロパティ・キー」バリューペアについての説明をご参照ください。
子テーマに3つの基本的変更を加える
それでは、背景色とテキスト色を変更し、Buttonブロックのスタイルを編集してみましょう。
子テーマのtheme.json
に次の設定を追加します。
{
"version": 3,
"settings": {
"color": {
"palette": [
{
"name": "Black",
"slug": "black",
"color": "#000000"
},
{
"name": "Yellow",
"slug": "yellow",
"color": "#FFFF00"
},
{
"name": "Purple",
"slug": "purple",
"color": "#800080"
},
{
"name": "White",
"slug": "white",
"color": "#FFFFFF"
}
]
}
},
"styles": {
"color": {
"background": "var(--wp--preset--color--black)",
"text": "var(--wp--preset--color--yellow)"
},
"blocks": {
"core/button": {
"color": {
"background": "var(--wp--preset--color--purple)",
"text": "var(--wp--preset--color--white)"
},
"border": {
"color": "var(--wp--preset--color--yellow)",
"width": "2px",
"style": "solid"
}
}
}
}
}
この設定により、背景と文字色が全体に適用され、ボタンスタイルはデフォルトにのみ反映されます。

スタイルバリエーションを上書きする
他のバリエーションでも同じボタンスタイルを適用するには、親テーマの命名規則に従った.json
ファイルを作成します。
例えば、イブニングスタイルバリエーションのボタンの枠線を上書きするには、子テーマのルートディレクトリ(または/styles
サブフォルダ)に01-evening.json
という名前のファイルを作成します。
{
"version": 3,
"title": "Evening",
"styles": {
"blocks": {
"core/button": {
"border": {
"color": "var(--wp--preset--color--white)",
"width": "3px",
"style": "dashed"
}
}
}
}
}
ここでは、ボタンを目立たせるために破線と幅を追加しています。これらの変更はtheme.json
の設定を上書きします。

カスタムスタイルバリエーションを作成する
さらに一歩進んで、Kinstaという新しいスタイルバリエーションを作成してみましょう。このバリエーションは、子テーマのtheme.json
ファイルからグローバル設定を継承し、独自のカラーパレットとボタンスタイルを適用します。
以下を/styles/kinsta.json
として保存してください。
{
"version": 3,
"title": "Kinsta",
"settings": {
"color": {
"palette": [
{
"name": "Primary",
"slug": "primary",
"color": "#261e1e"
},
{
"name": "Secondary",
"slug": "secondary",
"color": "#ff2900"
},
{
"name": "White",
"slug": "white",
"color": "#FFFFFF"
}
]
}
},
"styles": {
"color": {
"background": "var(--wp--preset--color--secondary)",
"text": "var(--wp--preset--color--primary)"
},
"blocks": {
"core/button": {
"color": {
"background": "var(--wp--preset--color--primary)",
"text": "var(--wp--preset--color--white)"
},
"border": {
"color": "var(--wp--preset--color--white)",
"width": "4px",
"style": "dotted"
}
}
}
}
}
これにより、カスタムパレットと独自のデザインを備えたバリエーションが完成します。

style.cssを読み込む方法
Twenty Twenty-Fiveのような本格的なブロックテーマでは、PHPを使って親テーマや子テーマにスタイルシートを手動で追加する必要はありません。WordPressコアがtheme.json
ファイルを基にCSSを自動で生成します。
ただし、style.css
ファイルに独自のスタイルを記述する場合は、別途読み込む必要があります。
// Frontend styles
add_action('wp_enqueue_scripts', function() {
// Enqueue parent theme stylesheet
wp_enqueue_style(
'parent-style',
get_template_directory_uri() . '/style.css'
);
// Enqueue child theme stylesheet
wp_enqueue_style(
'child-style',
get_stylesheet_uri(),
array('parent-style')
);
});
このコードにより、親テーマと子テーマの両方のstyle.css
ファイルがフロントエンドで読み込まれます。
スタイルが正しく読み込まれているか確認するには、子テーマのstyle.css
ファイルに次のCSSを追加してください。
body {
color: #ffff00;
background: #0000ff;
}
これにより、すべてのスタイルバリエーションに青い背景と黄色の文字色が適用されます(フロントエンドのみ)。
styles.css のシンプルな活用例
「なぜCSSを使う必要があるのか。theme.json
で全て対応できるのでは?」と疑問に思うかもしれませんが、結論から言えばそうではありません。
たとえば、theme.json
は:hover
のような疑似クラスをサポートしていません。すべてのボタンにホバー効果をつけたい場合、次のCSSを使うことができます。
.wp-block-button a:hover { background: #ffffff; color: #0000ff; }
これにより、すべてのバリエーションにおけるボタンブロックのフロントエンドにホバー効果が適用されます。
特定のバリエーションやブロックだけにこのホバー効果を適用したい場合は、条件付きのbodyクラス、ブロックフィルター、または対象ブロック専用のCSSといった、より高度な方法を使う必要があります。
ブロックスタイルバリエーションの追加
PHPとCSSを使ってボタンブロックに新しいスタイルバリエーションを追加する方法を見ていきます。
theme.json
にvariations
の配列を追加する場合、このケースでは機能しません。theme.json
はグローバルおよびブロックレベルのスタイルを扱いますが、ボタンの代替スタイルのようなブロックスタイルバリエーションは、別の方法で登録する必要があります。
ここではAlternative Outlineという新しいスタイルバリエーションを作成します。このスタイルはエディターのUIでデフォルトの「Fill」「Outline」スタイルと並んで表示され、フロントエンドでも正しく反映されます。
PHPでスタイルを登録
次のコードを子テーマのfunctions.php
ファイルに追加します。このコードは、コアが読み込まれた後、ページが描画される前にスタイルを登録します。
// Register "Alternative Outline" button style
add_action('init', function() {
register_block_style(
'core/button',
[
'name' => 'alternative-outline',
'label' => __('Alternative Outline', 'twenty-twenty-five-child'),
]
);
});
style.cssにカスタムスタイルを追加
次に、このバリエーションのスタイルを、:hover
状態を含めて子テーマのstyle.css
ファイルに定義します。
.wp-block-button.is-style-alternative-outline .wp-block-button__link {
background-color: transparent;
color: var(--wp--preset--color--yellow);
border: 2px dotted var(--wp--preset--color--yellow);
transition: all 0.7s ease-in-out;
}
.wp-block-button.is-style-alternative-outline .wp-block-button__link:hover {
background-color: var(--wp--preset--color--yellow);
color: var(--wp--preset--color--black);
}
ここで使用しているcolor
変数は、theme.json
のパレットで定義されており、サイト全体で一貫性が保たれます。

JSONでブロックスタイルバリエーションを作成する
WordPress 6.6からは、PHPを使わずにJSONだけでコアブロックのスタイルバリエーションを登録できます。
以下は、GroupブロックにPurple Backgroundという新しいバリエーションを追加する例です。エディターのサイドバーに、スタイル付きのプレビューと共に表示されます。
テーマの/styles/purple-background/
フォルダ内に、block.json
という名前のファイルを作成します。
{
"version": 3,
"$schema": "https://schemas.wp.org/trunk/theme.json",
"title": "Purple Background",
"slug": "section-purple",
"blockTypes": ["core/group"],
"styles": {
"border": {
"radius": "20px"
},
"color": {
"background": "#800080",
"text": "#eeeeee"
},
"spacing": {
"padding": {
"top": "var(--wp--preset--spacing--50)",
"right": "var(--wp--preset--spacing--50)",
"bottom": "var(--wp--preset--spacing--50)",
"left": "var(--wp--preset--spacing--50)"
}
}
}
}
Purple Backgroundバリエーションは、下の画像のようにエディターのサイドバーに表示されます。

複数のスタイルバリエーションを扱う場合は、/styles
サブフォルダに配置するのが推奨されます。この例では、ファイルパスは/styles/purple-background/block.json
となります。
JSON方式で考慮すべき最終的な注意点は次のとおりです。
- この方法ではPHPは不要で、必要なときにのみ関連するCSSを読み込むため、ページの読み込み負荷を軽減できます。
- Twenty Twenty-Fiveの子テーマを使用しているため、すでに
theme.json
と動的スタイリングが使われています。そのため、スタイルを手動で読み込む必要はありません。 - 一部のブロックは、現時点ではJSON経由ですべてのスタイルオプションをサポートしていない場合があります。下位互換性が重要な場合は、
register_block_style()
を使ってPHPでフォールバックを追加できます。
まとめ
ブロックテーマは驚くほど柔軟で、無数の開発の可能性を広げます。この記事では、ブロックテーマにおける子テーマの役割や活用方法をご紹介しました。様々なアイデアを形にするきっかけになれば幸いです。
さらに、カスタムコアブロックのスタイルバリエーションを追加する2つの方法も取り上げました。1つはPHPとCSSを使う方法、もう1つはJSONのみを使う方法です。
ご想像のとおり、紹介した例はどれも複数のアプローチに発展できます。WordPressには豊富な選択肢があり、同じ課題を解決する手段がいくつも用意されています。
たとえば、設定にはtheme.json
を使い、スタイルはstyle.css
にすべて任せてCSSの幅広い機能を活かすテーマを作ることも可能です。あるいは、特定のバリエーション使用時だけスタイルを読み込むように条件付きで読み込みを行う方法もあります。可能性は無限大です。
Kinstaでは、基本的なものから高度なものまで、WordPressの作業を高速化・整理・改善するための開発ツールを幅広く用意しています。まずは30日間無料でKinstaをお試しください。