【WordPress】theme.jsonって何?設定ファイル1つでサイトの見た目を統一する仕組み

theme.jsonは、色・フォント・見出しスタイルを1つのファイルでまとめて管理できる「サイトの司令塔」。

この記事では、実際のサンプルコードを見ながら図解でざっくり理解することを目指します!

① theme.jsonって何をするファイル?

AD – 読み進める前のひとやすみ

WordPressでブロックテーマを使うとき、サイト全体の「色・フォント・見出しのスタイル」をまとめて管理できるのがtheme.jsonです。

今まではCSSファイルにスタイルをあれこれ書いていたのが、theme.json1つに集約できるイメージです。

😓 今まで(CSSファイル)

style.css、追加CSS、子テーマのCSS…

あちこちに書き散らかして
どこを直せばいいかわからない😭

😊 theme.jsonなら

1つのファイルに全部まとまってる!

サイト全体に一括で反映されるから
修正もラク😊

つまりtheme.jsonは「サイトのデザインルールをまとめて決める設定ファイル」です。
CSSの知識がなくてもある程度整ったデザインが作れるのが最大のメリット!


② 全体の構造をざっくり見てみよう

AD – 読み進める前のひとやすみ

theme.jsonの中身は大きく2階建てになっています。
まずはこの2つだけ覚えれば大丈夫です!

🏠 2階:styles(見た目)

「h2の背景色はこれ」「h3には左ボーダーをつける」など、
実際にサイトに反映されるスタイルを書く場所です。

🏗️ 1階:settings(設定・部品置き場)

「この色を使えるようにする」「フォントサイズはこれとこれ」など、
サイトで使える部品を登録する場所です。

順番としては👇

🎨

settingsで
色を登録

✏️

stylesで
見出しに適用

🌐

サイト全体に
自動反映

📝 ざっくり覚え方:
「settings=部品を用意する」「styles=その部品を使って飾り付ける」
この2つのセットで動いています!

③ 色とフォントを登録する(settings)

AD – 読み進める前のひとやすみ

settingsは「このサイトで使える色とフォントサイズを登録する場所」です。

ここで登録した色が、エディターのカラーパレットに並びます。

カラーパレットの作り方

こんなふうに書きます👇

"settings": {
  "color": {
    "palette": [
      { "slug": "base",      "color": "#f9f7f4", "name": "ベース" },
      { "slug": "primary",   "color": "#fff2b2", "name": "黄色" },
      { "slug": "secondary", "color": "#a7d9dd", "name": "青緑" },
      { "slug": "accent",    "color": "#ee7d50", "name": "オレンジ" }
    ]
  }
}

slug

CSS変数の名前になる
英数字で書く

color

実際の色コード
#から始まる16進数

name

エディターに表示される
日本語でもOK

💡 登録するとどうなる?

エディターのカラーパレットにこの色が並ぶようになります。
さらにvar(--wp--preset--color--primary)というCSS変数として
styles のセクションでも使えるようになります!

フォントサイズの登録

フォントサイズも同じように登録できます👇

"settings": {
  "typography": {
    "fontSizes": [
      { "slug": "small",   "size": "0.875rem", "name": "小" },
      { "slug": "normal",  "size": "1rem",     "name": "標準" },
      { "slug": "medium",  "size": "1.125rem", "name": "中" },
      { "slug": "large",   "size": "1.375rem", "name": "大" }
    ]
  }
}

まとめると
settings に登録した色・フォントサイズは
① エディターのパレットに並ぶ
② CSS変数として styles で使い回せる
この2つが自動でできるようになります!

④ 見出しやブロックにスタイルをつける(styles)

AD – 読み進める前のひとやすみ

settingsで登録した色を、実際に見出しに適用するのがstylesの役割です。

elementsでh2に背景色をつける

こんなふうに書きます👇

"styles": {
  "elements": {
    "h2": {
      "color": {
        "background": "var(--wp--preset--color--primary)"
      },
      "spacing": {
        "padding": {
          "top": "0.5rem", "bottom": "0.5rem",
          "left": "1rem",  "right": "1rem"
        }
      },
      "typography": {
        "fontSize": "var(--wp--preset--font-size--large)",
        "fontWeight": "600"
      }
    }
  }
}

❌ Before

h2の見出しテキスト

スタイルなし・シンプルすぎる

✅ After

h2の見出しテキスト

背景色がついて見やすくなった!

blocksでコアブロックの初期スタイルを変える

elementsが見出しやリンクなどHTML要素に適用するのに対して、
blocksはWordPressのブロック単位でスタイルを適用できます。

例えば引用ブロック(core/quote)に左ボーダーをつけるにはこう書きます👇

"styles": {
  "blocks": {
    "core/quote": {
      "border": {
        "left": {
          "color": "var(--wp--preset--color--primary)",
          "width": "4px",
          "style": "solid"
        }
      },
      "spacing": {
        "padding": { "left": "1rem" }
      },
      "typography": {
        "fontSize": "var(--wp--preset--font-size--medium)"
      }
    }
  }
}

❌ Before

「ブロックテーマの醍醐味は、サイト全体を自分の手でプロデュースできること」

デフォルトのまま・引用感が薄い

✅ After

「ブロックテーマの醍醐味は、サイト全体を自分の手でプロデュースできること」

左ボーダーで引用感がひと目でわかる!

📖 elementsとblocksの使い分け

elements h1〜h6・link などHTML要素に適用
例:見出しのフォントサイズ、リンクの色
blocks core/quote・core/table などブロック単位で適用
例:引用ブロックのボーダー、テーブルの背景色

⑤ 実際のtheme.jsonを見てみよう

AD – 読み進める前のひとやすみ

ここまで説明してきた内容を、実際に動くtheme.jsonにまとめました。
これが最小構成のサンプルコードです。コピーしてそのまま使えます!

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 3,
  "settings": {
    "appearanceTools": true,
    "useRootPaddingAwareAlignments": true,
    "color": {
      "defaultPalette": false,
      "palette": [
        { "slug": "base",       "color": "#faf8f5", "name": "ベース(背景)" },
        { "slug": "text",       "color": "#2c2c2c", "name": "テキスト" },
        { "slug": "white",      "color": "#ffffff", "name": "" },
        { "slug": "muted",      "color": "#888888", "name": "グレー" }
      ]
    },
    "typography": {
      "lineHeight": true,
      "fontFamilies": [
        {
          "fontFamily": "\"Helvetica Neue\", Arial, \"Hiragino Kaku Gothic Pro\", \"メイリオ\", Meiryo, sans-serif",
          "slug": "sans",
          "name": "ゴシック"
        },
        {
          "fontFamily": "Georgia, \"游明朝\", YuMincho, \"Hiragino Mincho Pro\", serif",
          "slug": "serif",
          "name": "明朝"
        }
      ],
      "fontSizes": [
        { "slug": "small",   "size": "0.875rem", "name": "" },
        { "slug": "normal",  "size": "1rem",     "name": "標準" },
        { "slug": "medium",  "size": "1.125rem", "name": "" },
        { "slug": "large",   "size": "1.375rem", "name": "" },
        { "slug": "x-large", "size": "1.75rem",  "name": "特大" }
      ]
    },
    "spacing": {
      "units": [ "px", "em", "rem", "vh", "vw", "%" ]
    },
    "layout": {
      "contentSize": "800px",
      "wideSize": "1000px"
    }
  },
  "styles": {
    "color": {
      "background": "var(--wp--preset--color--base)",
      "text": "var(--wp--preset--color--text)"
    },
    "typography": {
      "fontFamily": "var(--wp--preset--font-family--sans)",
      "fontSize": "var(--wp--preset--font-size--medium)",
      "lineHeight": "1.8"
    },
    "elements": {
      "link": {
        "color": { "text": "var(--wp--preset--color--text)" },
        "typography": { "textDecoration": "underline" }
      },
      "h1": {
        "typography": {
          "fontSize": "var(--wp--preset--font-size--x-large)",
          "fontWeight": "600",
          "lineHeight": "1.4"
        }
      }
    },
    "blocks": {
      "core/post-content": {
        "typography": {
          "fontSize": "var(--wp--preset--font-size--medium)",
          "lineHeight": "1.8"
        }
      },
      "core/quote": {
        "border": {
          "left": {
            "color": "var(--wp--preset--color--muted)",
            "width": "4px",
            "style": "solid"
          }
        }
      }
     }
  },
  "templateParts": [
    { "name": "header",  "title": "ヘッダー",   "area": "header" },
    { "name": "footer",  "title": "フッター",   "area": "footer" }
  ]
}

📖 コードの見方

settings 使える色・フォントサイズを登録する場所 styles 見出しや本文のスタイルを適用する場所 templateParts ヘッダー・フッターのパーツを登録する場所

⚠️ 使うときの注意

テーマフォルダの直下に theme.json という名前で保存してください。
ファイル名が違うと反映されません!

JSONファイルの書き方で迷ったら

theme.jsonを初めて見ると「カッコだらけで何がなんだか…」ってなりますよね😅
よくハマるポイントを3つだけ覚えておきましょう!

⚠️ よくあるミス① 最後のカンマ問題

❌ ダメな書き方

{
  "slug": "primary",
  "color": "#fff2b2",  ← カンマ
}

✅ 正しい書き方

{
  "slug": "primary",
  "color": "#fff2b2"  ← カンマなし
}

最後の項目の後ろにカンマをつけるとエラーになります。
「最後の子にはカンマなし」と覚えましょう!

💡 {} と [] の使い分け

{ }

オブジェクト

「名前:値」のセット
1つのまとまりを表す

[ ]

配列

同じものの並び
カラーパレットなど複数登録するとき

"palette": [ ← [] 複数の色を並べるから配列
  {        ← {} 1つの色のまとまり
    "slug": "primary",
    "color": "#fff2b2"
  },       ← カンマあり(次の{}がまだある)
  {        ← {} 2つ目の色
    "slug": "secondary",
    "color": "#a7d9dd"
  }        ← カンマなし(最後)
]

🛠️ エラーが出たときの確認方法

theme.jsonを保存してエディターを開いたときに
スタイルが反映されていない場合は👇

  • カンマの過不足がないか確認
  • {}と[]が正しく閉じているか確認
  • JSONLint(無料)にコードを貼り付けるとエラー箇所を教えてくれます!

もっと使いこなしたい人へ

AD – 読み進める前のひとやすみ

theme.jsonの基本が理解できたら、次のステップに進んでみましょう!
ここでは2つ紹介します。

細かな設定いろいろ(覚えなくてOK!)

theme.jsonには他にも便利な設定がいくつかあります。
今は「こんなものがあるんだな」程度で大丈夫です😊

"appearanceTools": true

余白・ボーダー・リンクカラーなど、よく使うデザイン設定をまとめてONにできるスイッチです。ほぼ必須の設定です。

"useRootPaddingAwareAlignments": true

全幅ブロックを使うときに左右の余白を正しく計算してくれます。サイドバーありのレイアウトなら入れておくと安心です。

"defaultPalette": false

WordPressのデフォルトカラーパレット(青・赤・緑など)を非表示にします。自分で登録した色だけをエディターに表示したいときに使います。

"fluid": true

フォントサイズを画面幅に応じて自動で伸び縮みさせる機能です。スマホでは小さく・PCでは大きく、が自動でできます。慣れてきたら試してみてください。

📖 もっと詳しく知りたい方は
WordPressの公式ドキュメント(英語)に全設定の一覧があります。
Theme.json リファレンス → developer.wordpress.org

register_block_styleとの組み合わせ

theme.jsonで「サイト全体のルール」を決めたら、次はregister_block_styleで「ブロックのスタイルバリエーション」を追加できます。

📋 theme.json の役割

サイト全体のデザインルール

  • 色・フォントの登録
  • 見出しの基本スタイル
  • レイアウトの幅

🎨 register_block_style の役割

ブロックのスタイル追加

  • まとめボックス
  • ポイントボックス
  • 注意ボックス

💡 イメージとしては
theme.json=家の設計図(全体のルール)
register_block_style=家具のバリエーション(パーツの使い分け)
この2つを組み合わせると、HTMLを書かなくてもエディターだけでスタイルを切り替えられるようになります!

※ register_block_styleの詳しい使い方は別記事で解説予定です。

最後まで読んでいただき、ありがとうございました。
おつかれさまでした 🍵

スポンサーリンク