WordPressクラシックテーマでブロックエディターのカラーパレットに色を追加する方法

WordPressクラシックテーマでブロックエディターのカラーパレットに色を追加する方法

ブロックエディターのカラーパレットに色(オリジナルカラー)を追加する方法をご紹介します。

カラーパレットに色を追加する方法は、

theme.json で追加する方法
functions.php で追加する方法

の2種類あります。

しかし、クラシックテーマで色を追加する場合は、functions.php を使う方法一択です。

今回はクラシックテーマのブロックエディタのカラーパレットに、色だけを追加する方法をご紹介します。

クラシックテーマとブロックテーマで方法が違う

WordPressのテーマには大きく2種類あります。

  • ブロックテーマ(Full Site Editing対応):theme.json で管理
  • クラシックテーマ(従来型):functions.php で管理

「カラーパレットを追加したいなら theme.json に書けばいいんでしょ?」

と思いがちですが、クラシックテーマでそれをやると問題が起きます。

やらないほうがいい方法:theme.jsonで追加する

クラシックテーマのルートに theme.json を置いてカラーを定義する方法です。

一見うまくいくように見えますが、theme.json を置いた瞬間にWordPressはそのテーマをブロックテーマとして認識します。

その結果、エディターのスタイル適用のされ方が変わり、editor-style.css の効き方がおかしくなったり、編集画面のフォントが突然明朝体になったりと、想定外の崩れが発生します。

クラシックテーマには theme.json は置かない方が良いです。

はじめよくわかってなくて、theme.json を設置したら、編集画面のフォントが変わってしまってびっくり!(速攻で撤去した)
クラシックテーマに theme.json を置くと、WordPressが「ブロックテーマだ」と認識してエディターのスタイル適用のされ方が変わってしまうようです。

色を追加する方法

1)functions.phpの追記

クラシックテーマでカラーパレットを追加

クラシックテーマでカラーパレットを追加するには、functions.php に追記する方法を使います。

functions.phpadd_theme_support( 'editor-color-palette' ) を使って以下を追記します。

function add_custom_color_palette() {
    add_theme_support( 'editor-color-palette', array(
        array( 'name' => 'ブランドカラー', 'slug' => 'brand',     'color' => '#e94f37' ),
        array( 'name' => 'サブカラー',     'slug' => 'brand-sub', 'color' => '#f5a623' ),
    ) );
}
add_action( 'after_setup_theme', 'add_custom_color_palette' );

これでエディターのカラーパレットにオリジナルカラーが追加されます。

2)CSSの追記

functions.php への追記だけでは、カラーパレットに色の選択肢が追加されるだけです。

実際にエディターやフロントエンドでその色が反映されるようにするには、CSSの追記も必要です。

WordPressが自動生成するクラス名は以下の形式です。

  • テキストカラー:has-{slug}-color
  • 背景色:has-{slug}-background-color

slug に指定した値がそのままクラス名に使われるので、先ほどの例(brand / brand-sub)であれば、以下のCSSを追記します。

css

/* テキストカラー */
.has-brand-color {
    color: #e94f37;
}
.has-brand-sub-color {
    color: #f5a623;
}

/* 背景色 */
.has-brand-background-color {
    background-color: #e94f37;
}
.has-brand-sub-background-color {
    background-color: #f5a623;
}

このCSSは style.css(またはエンキューしているCSSファイル)に追記します。

補足:エディター内にも反映させたい場合

上記だけではフロントエンド(実際のサイト表示)にしか反映されません。エディターの編集画面でもプレビューとして色を確認したい場合は、add_editor_style() でエディター用CSSを読み込ませる必要があります。

デフォルトカラーを残しつつ色を追加する方法

1)functions.phpへの追記

デフォルトカラーを残しつつ色を追加する方法
デフォルトカラーを残しつつ色を追加した状態

ここでひとつ注意点があります。

上記の方法を使うと、WordPressのデフォルトカラーが消えて、自分で定義した色だけになります。

「デフォルトは残しておきたい」という場合は、デフォルトカラーの一覧を自分でコピーして並べるという力技が必要です。

function add_custom_color_palette() {
    add_theme_support( 'editor-color-palette', array(
        // 追加カラー
        array( 'name' => '赤',             'slug' => 'red',                    'color' => '#ff0000' ),
        array( 'name' => 'ピンク',         'slug' => 'pink',                   'color' => '#ffc7ca' ),
        array( 'name' => 'ライトグリーン', 'slug' => 'light-green',            'color' => '#ccffcc' ),
        array( 'name' => 'スカイブルー',   'slug' => 'sky-blue',               'color' => '#ccffff' ),
        array( 'name' => 'ライトイエロー', 'slug' => 'light-yellow',           'color' => '#ffff99' ),
        array( 'name' => 'ライトグレー', 'slug' => 'light-gray',           'color' => '#CCC' ),
        // --- WordPressデフォルトカラー ---
        array( 'name' => 'ブラック',              'slug' => 'black',                  'color' => '#000000' ),
        array( 'name' => 'シアンブルーシェード',  'slug' => 'cyan-bluish-gray',       'color' => '#abb8c3' ),
        array( 'name' => 'ホワイト',              'slug' => 'white',                  'color' => '#ffffff' ),
        array( 'name' => 'ペールピンク',          'slug' => 'pale-pink',              'color' => '#f78da7' ),
        array( 'name' => 'ビビッドレッド',        'slug' => 'vivid-red',              'color' => '#cf2e2e' ),
        array( 'name' => 'ルミナスビビッドオレンジ', 'slug' => 'luminous-vivid-orange','color' => '#ff6900' ),
        array( 'name' => 'ルミナスビビッドアンバー', 'slug' => 'luminous-vivid-amber', 'color' => '#fcb900' ),
        array( 'name' => 'ライトグリーンシアン',  'slug' => 'light-green-cyan',       'color' => '#7bdcb5' ),
        array( 'name' => 'ビビッドグリーンシアン','slug' => 'vivid-green-cyan',       'color' => '#00d084' ),
        array( 'name' => 'ペールシアンブルー',    'slug' => 'pale-cyan-blue',         'color' => '#8ed1fc' ),
        array( 'name' => 'ビビッドシアンブルー',  'slug' => 'vivid-cyan-blue',        'color' => '#0693e3' ),
        array( 'name' => 'ビビッドパープル',      'slug' => 'vivid-purple',           'color' => '#9b51e0' ),
    ) );
}
add_action( 'after_setup_theme', 'add_custom_color_palette' );

デフォルトカラーのslugはWordPressのコアで定義されているものをそのまま使っています。

追加カラーのslugが被らないよう注意が必要です。
(上記の例では light-green-cyanlight-green で別slugなのでOKです)。

このような感じで、自分の好きな数だけ設定できるよ!

2)CSSの追記

functions.php への追記だけではカラーパレットに色の選択肢が追加されるだけです。実際に色を反映させるにはCSSの追記も必要です。

追加カラー分とデフォルトカラー分、両方まとめて記述しておきましょう。

css

/* ========================================
   追加カラー
======================================== */

/* テキストカラー */
.has-red-color              { color: #ff0000; }
.has-pink-color             { color: #ffc7ca; }
.has-light-green-color      { color: #ccffcc; }
.has-sky-blue-color         { color: #ccffff; }
.has-light-yellow-color     { color: #ffff99; }
.has-light-gray-color       { color: #cccccc; }

/* 背景色 */
.has-red-background-color              { background-color: #ff0000; }
.has-pink-background-color             { background-color: #ffc7ca; }
.has-light-green-background-color      { background-color: #ccffcc; }
.has-sky-blue-background-color         { background-color: #ccffff; }
.has-light-yellow-background-color     { background-color: #ffff99; }
.has-light-gray-background-color       { background-color: #cccccc; }

/* ========================================
   WordPressデフォルトカラー
======================================== */

/* テキストカラー */
.has-black-color              { color: #000000; }
.has-cyan-bluish-gray-color   { color: #abb8c3; }
.has-white-color              { color: #ffffff; }
.has-pale-pink-color          { color: #f78da7; }
.has-vivid-red-color          { color: #cf2e2e; }
.has-luminous-vivid-orange-color { color: #ff6900; }
.has-luminous-vivid-amber-color  { color: #fcb900; }
.has-light-green-cyan-color   { color: #7bdcb5; }
.has-vivid-green-cyan-color   { color: #00d084; }
.has-pale-cyan-blue-color     { color: #8ed1fc; }
.has-vivid-cyan-blue-color    { color: #0693e3; }
.has-vivid-purple-color       { color: #9b51e0; }

/* 背景色 */
.has-black-background-color              { background-color: #000000; }
.has-cyan-bluish-gray-background-color   { background-color: #abb8c3; }
.has-white-background-color              { background-color: #ffffff; }
.has-pale-pink-background-color          { background-color: #f78da7; }
.has-vivid-red-background-color          { background-color: #cf2e2e; }
.has-luminous-vivid-orange-background-color { background-color: #ff6900; }
.has-luminous-vivid-amber-background-color  { background-color: #fcb900; }
.has-light-green-cyan-background-color   { background-color: #7bdcb5; }
.has-vivid-green-cyan-background-color   { background-color: #00d084; }
.has-pale-cyan-blue-background-color     { background-color: #8ed1fc; }
.has-vivid-cyan-blue-background-color    { background-color: #0693e3; }
.has-vivid-purple-background-color       { background-color: #9b51e0; }

このCSSを style.css(またはエンキューしているCSSファイル)に追記します。

なぜCSSが必要なのか

add_theme_support( 'editor-color-palette' ) がやることは「カラーパレットに選択肢を表示する」だけです。色を選んだときに実際に適用されるCSSは、自分で書く必要があります。

WordPressは色が選択されると has-{slug}-color(テキスト)や has-{slug}-background-color(背景)というクラスをHTMLに付与します。

このクラスに対するスタイルがないと、見た目に何も反映されません。

デフォルトカラーを再定義したことによる注意点

WordPressのデフォルトカラーは、コアのCSSで has-black-color などのスタイルがあらかじめ定義されています。

しかし add_theme_support( 'editor-color-palette' ) で色を上書き登録すると、デフォルトカラーの登録ごと差し替わります。WordPressはもうデフォルトカラーを「知らない状態」になるため、コアCSSとの紐付けも期待できなくなります。

結果として、追加カラー・デフォルトカラー問わず、登録したすべての色のCSSを自分で書く必要があります。

まとめ

クラシックテーマのカラーパレットに色を追加するときは、 functions.php に追加一択です。

テーマの種類カラーパレットの追加方法
クラシックテーマfunctions.php に追加
ブロックテーマtheme.json に追加

また、デフォルトを残したい場合はデフォルトカラー一覧を自前で用意する必要があります。
少し手間ですが、一度書いてしまえば使い回せます。

よく使う色や、テーマカラーを設定しておくと便利なので、オススメです。