テーマサポート

新しいブロックにはすべてのテーマで有効な基本サポートやオプトイン可能なオプションがあり拡張やカスタマイズが可能です。

テーマを構築する際は、以下の新しいコンセプトを検討してください。

  • エディターカラーパレット – 色のデフォルトセットを提供します。ただしテーマは独自の色を登録したり、オブションでユーザーに定義したパレットからのみ色を選択するよう強制できます。
  • エディターテキストサイズパレット – テキストサイズのデフォルトセットを提供します。ただしテーマは独自のテキストサイズを登録したり、オブションでユーザーに設定されたサイズからのみ選択するよう強制できます。
  • レスポンシブな埋め込みコンテンツ – テーマが埋め込みコンテンツをレスポンシブ化するにはオプトインしなければなりません。
  • フロントエンドとエディターのスタイル – ブロックのスタイルを最大限活かすには、テーマ作者はコアのスタイルが適切であることを確認してオプトインするか、テーマに合う独自のスタイルを記述します。
  • ブロックツール – テーマは「行の高さ」や「カスタムユニット」などいくつかのブロックツールをオプトインできます。
  • コアのブロックパターン – テーマはデフォルトのブロックパターンをオプトアウトできます。

デフォルトでブロックはそのまま使える基本的なスタイルを提供します。また、以下で説明するようなオプトインで有効化するスタイルも提供します。テーマはこれらのスタイルを追加したり上書きできます。逆にテーマではまったくスタイルを提供せず、ブロックが提供するスタイルに完全に依存することもできます。

いくつかの高度なブロック機能はテーマによるオプトインのサポートが必要です。これはブロックからのスタイルの提供が容易ではなく、正しく動作するにはテーマの構造の理解が必要なためです。

これらの機能をオプトインするには以下の例のように、テーマの functions.php ファイルで add_theme_support を呼び出します。

function mytheme_setup_theme_supported_features() {
    add_theme_support( 'editor-color-palette', array(
        array(
            'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ),
            'slug' => 'strong-magenta',
            'color' => '#a156b4',
        ),
        array(
            'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ),
            'slug' => 'light-grayish-magenta',
            'color' => '#d0a5db',
        ),
        array(
            'name' => esc_attr__( 'very light gray', 'themeLangDomain' ),
            'slug' => 'very-light-gray',
            'color' => '#eee',
        ),
        array(
            'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ),
            'slug' => 'very-dark-gray',
            'color' => '#444',
        ),
    ) );
}

add_action( 'after_setup_theme', 'mytheme_setup_theme_supported_features' );

オプトイン機能

デフォルトのブロックスタイル

コアブロックにはデフォルトの構造化スタイルが含まれていてエディター、フロントエンドの両方でロードされます。このスタイルの例は「カラム」ブロックで利用されている CSS です。このルールがなければブロックはまったくカラムを含まない壊れたレイアウトになります。

ブロックエディターでテーマはフロントエンドに拡張したスタイルをオプトインできます。このスタイルの例は「引用」ブロックの左側のデフォルトのカラーバーです。テーマでこのスタイルを使用する場合はテーマサポートに wp-block-styles を追加します。

add_theme_support( 'wp-block-styles' );

幅広の配置

「画像」ブロックやいくつかのブロックには「幅広 (wide)」や「全幅 (full)」を定義する機能があり、ブロックのラッパーに対応するクラス名を追加します (alignwide や alignfull)。テーマは以下のようにオプトインします。

add_theme_support( 'align-wide' );

この関数の詳細については add_theme_support() の開発者ドキュメント を参照してください。

幅広の配置とフロート

幅広な画像、サイドバー、中央揃えのカラム、中央揃えのカラム内でフロートする要素等々、レスポンシブなレイアウト作成は困難です。

ブロックエディターはフロートした画像に追加マークアップを付加してスタイリングを容易にします。

キャプション付きの Image のマークアップを示します。

<figure class="wp-block-image">
    <img src="..." alt="" width="200px" />
    <figcaption>Short image caption.</figcaption>
</figure>

左にフロートする画像のマークアップを示します。

<div class="wp-block-image">
    <figure class="alignleft">
        <img src="..." alt="" width="200px" />
        <figcaption>Short image caption.</figcaption>
    </figure>
</div>

codepen にマークアップを使用した例があります。レスポンシブなレイアウトでサイドバー、幅広の画像、キャプション付きのフロートする要素ががあります。

ブロックカラーパレット

異なるブロックはそれぞれで色をカスタマイズしている可能性があります。ブロックエディターはデフォルトのパレットを提供しますが、テーマはこれを上書きして独自のパレットを提供できます。

add_theme_support( 'editor-color-palette', array(
    array(
        'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ),
        'slug' => 'strong-magenta',
        'color' => '#a156b4',
    ),
    array(
        'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ),
        'slug' => 'light-grayish-magenta',
        'color' => '#d0a5db',
    ),
    array(
        'name' => esc_attr__( 'very light gray', 'themeLangDomain' ),
        'slug' => 'very-light-gray',
        'color' => '#eee',
    ),
    array(
        'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ),
        'slug' => 'very-dark-gray',
        'color' => '#444',
    ),
) );

name は上の例のようなラベルです。ツールチップに表示され、ユーザーに意味のある説明を伝えます。スクリーンリーダーを使用するユーザーには特に重要で、説明が不十分であれば色の認識が困難になります。slug は色の一意の識別子です。ブロックエディターのカラーパレットで使われる CSS クラスの生成で使用されます。color は色を指定する16進コードです。

Twenty Nineteen テーマのメインカラーやサブカラーのように動的に変わる色もあり、これらの色はプログラム的に記述できません。その場合でも必要な際のデフォルト値として意味のあるテキストを name に設定することを推奨します。

色はパレット上に順番に表示され、指定可能な数に制限はありません。

テーマにはコンテキストに応じて色に適用するクラスを作成する責任があります。コアブロックは「color」コンテキストと「background-color」コンテキストを使用します。コアブロックのすべてのコンテキストで正しく「strong magenta」を適用するにはテーマは次のクラスを実装する必要があります。

.has-strong-magenta-background-color {
    background-color: #313131;
}

.has-strong-magenta-color {
    color: #f78da7;
}

クラス名は、最初に「has-」、続けてケバブケースを使用したクラス名、最後にコンテキスト名で作成します。

ブロックグラデーションのプリセット

異なるブロックはそれぞれ事前に定義されたグラデーションを選択している可能性があります。ブロックエディターはデフォルトのグラデーションのプリセットを提供しますが、テーマはこれを上書きし独自のグラデーションを提供できます。

add_theme_support(
    'editor-gradient-presets',
    array(
        array(
            'name'     => esc_attr__( 'Vivid cyan blue to vivid purple', 'themeLangDomain' ),
            'gradient' => 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
            'slug'     => 'vivid-cyan-blue-to-vivid-purple'
        ),
        array(
            'name'     => esc_attr__( 'Vivid green cyan to vivid cyan blue', 'themeLangDomain' ),
            'gradient' => 'linear-gradient(135deg,rgba(0,208,132,1) 0%,rgba(6,147,227,1) 100%)',
            'slug'     =>  'vivid-green-cyan-to-vivid-cyan-blue',
        ),
        array(
            'name'     => esc_attr__( 'Light green cyan to vivid green cyan', 'themeLangDomain' ),
            'gradient' => 'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)',
            'slug'     => 'light-green-cyan-to-vivid-green-cyan',
        ),
        array(
            'name'     => esc_attr__( 'Luminous vivid amber to luminous vivid orange', 'themeLangDomain' ),
            'gradient' => 'linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)',
            'slug'     => 'luminous-vivid-amber-to-luminous-vivid-orange',
        ),
        array(
            'name'     => esc_attr__( 'Luminous vivid orange to vivid red', 'themeLangDomain' ),
            'gradient' => 'linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)',
            'slug'     => 'luminous-vivid-orange-to-vivid-red',
        ),
    )
);

name は上の例のようなラベルです。ツールチップに表示され、ユーザーに意味のある説明を伝えます。スクリーンリーダーを使用するユーザーには特に重要で、説明が不十分であればグラデーションの認識が困難になります。gradient はブロックの背景色に適用されるグラデーションの CSS 値です。有効なグラデーションタイプの詳細については mozilla のドキュメント を参照してください。slug はグラデーションの一意の識別子です。ブロックエディターで使われる CSS クラスの生成で使用されます。

テーマにはグラデーションに適用するクラスを作成する責任があります。正しく「Vivid cyan blue to vivid purple」を適用するには、テーマは次のクラスを実装する必要があります。

.has-vivid-cyan-blue-to-vivid-purple-gradient-background {
    background: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);
}

ブロックフォントサイズ:

「段落」ブロックのように、ユーザーはブロックで使用するフォントのサイズを構成できます。ブロックはでフォントサイズのデフォルトセットを提供しますが、テーマはこれを上書きし独自のセットを提供できます。

add_theme_support( 'editor-font-sizes', array(
    array(
        'name' => esc_attr__( 'Small', 'themeLangDomain' ),
        'size' => 12,
        'slug' => 'small'
    ),
    array(
        'name' => esc_attr__( 'Regular', 'themeLangDomain' ),
        'size' => 16,
        'slug' => 'regular'
    ),
    array(
        'name' => esc_attr__( 'Large', 'themeLangDomain' ),
        'size' => 36,
        'slug' => 'large'
    ),
    array(
        'name' => esc_attr__( 'Huge', 'themeLangDomain' ),
        'size' => 50,
        'slug' => 'huge'
    )
) );

フォントサイズはテーマが提供した順番でフォントサイズピッカー上にレンダリングされます。

テーマには正しいフォントサイズスタイルに適用するクラスを作成する責任があります。クラス名は、最初に「has-」、続けてケバブケースを使用したフォントサイズ名、最後に -font-size で作成します。

たとえば標準のフォントサイズであれば、テーマは次のクラスを提供します。

.has-regular-font-size {
    font-size: 16px;
}

注意: スラッグ default と custom は予約済みのため、テーマでは使えません。

カスタムフォントサイズの無効化

テーマはカスタムフォントサイズの設定を無効化できます。

add_theme_support( 'disable-custom-font-sizes' );

無効化するとユーザーはブロックエディターで提供されるデフォルトのサイズ、またはテーマサポート設定 editor-font-sizes で提供されたサイズに制限されます。

ブロックカラーパレットでのカスタム色の無効化

デフォルトでブロックのユーザーは、カラーパレットを使用してエディターやテーマのデフォルトの色と異なるカスタム色を選択できます。

テーマはこの機能を無効化できます。

add_theme_support( 'disable-custom-colors' );

無効化するとユーザーは、テーマが提供した editor-color-palette、またはテーマが提供していなければエディターのデフォルト色からのみ色を選択できます。

カスタムグラデーションの無効化

テーマはカスタムグラデーションの設定を無効化できます。

add_theme_support( 'disable-custom-gradients' );

無効化するとユーザーは、ブロックエディターで提供されるデフォルトのグラデーション、またはテーマサポート設定 editor-gradient-presets で提供されたグラデーションに制限されます。

カスタムの行の高さのサポート

「段落」や「見出し」などいくつかのブロックは行の高さのカスタマイズをサポートします。テーマはこの機能のサポートを有効化できます。

add_theme_support( 'custom-line-height' );

カスタムユニットのサポート

ユーザーはピクセルに加えて、サイズやパディングなどを定義する他の単位を使用できます。利用可能な単位は px、em、rem、vh、vw です。テーマはこの機能のサポートを無効化できます。

add_theme_support( 'custom-units', array() );

テーマはまた利用可能なカスタムユニットを選択できます。

add_theme_support( 'custom-units', 'rem', 'em' );

デフォルトのブロックパターンの無効化

WordPress には多くの組み込みブロックパターンが付属します。テーマは同梱のパターンをオプトアウトし、独自のセットを提供できます。

remove_theme_support( 'core-block-patterns' );

エディタースタイル

ブロックエディターはテーマの エディタースタイル をサポートしますが、クラシックエディターとは少し異なって動作します。

クラシックエディターではエディタースタイルは WYSIWYG エディターの iframe に直接、変更なしでロードされていました。しかしブロックエディターは iframe を使用しません。このためブロックエディターではスタイルがエディターのコンテンツだけに適用されるよう、エディタースタイルを選択的に書き換えるか、一部の CSS セレクターを調整して自動的に変換します。またこの動作によりブロックエディターはエディタースタイルでブロックのバリエーションをプレビューできます。

たとえばエディタースタイル内の body { ... } は .editor-styles-wrapper { ... } に書き換えられます。ちなみにこのことはエディターのクラス名を直接 指定すべきでない ことも意味しています。

この動作は少し変わっているため、テーマには add_editor_style に加えて追加のオプトインが必要です。

add_theme_support( 'editor-styles' );

エディタースタイルの多くを変更する必要はありません。ほとんどのテーマは上のコードを追加することでクラシックエディターでもブロックエディターでも同じ結果を得られます。

エディタースタイルのエンキュー

エディター画面に CSS をエンキューしロードするには add_editor_style 関数を使用してください。クラシックエディターではこの関数のみでエディターにスタイルを追加できました。新しいブロックエディターでは上で説明したようにまず add_theme_support( 'editor-styles'); が必要です。

add_editor_style( 'style-editor.css' );

functions.php ファイルに上の行を追加すると、エディター内にロードされるスタイルシートのキューにスタイルシート style-editor.css が追加されます。

基本の色

他の Web ページのようにエディターをスタイルできます。次のコードは背景色とフォントの色を青に変更します。

/* `style-editor.css` ファイルに追加する */
body {
    background-color: #d3ebf3;
    color: #00005d;
}

エディターの幅の変更

エディターのメインのカラムの幅を変更するには style-editor.css に次の CSS を追加します。

/* メインのカラム幅 */
.wp-block {
    max-width: 720px;
}

/* 「幅広」ブロックの幅 */
.wp-block[data-align="wide"] {
    max-width: 1080px;
}

/* 「全幅」ブロックの幅 */
.wp-block[data-align="full"] {
    max-width: none;
}

テーマと合わせるためにこれらのエディターの幅を使用できます。% や px を含む任意の CSS 幅の単位を使用できます。

スタイルシートでのスタイルの適用 も参照してください。

埋め込みコンテンツのレスポンシブ化

「埋め込み」ブロックは、iFrame 内に埋め込まれたコンテンツのアスペクト比を反映するため、自動的に埋め込みコンテンツに対してスタイルを適用します。アスペクト比にレスポンシブな形でのブロックスタイルは次のようになります。

<figure class="wp-embed-aspect-16-9 wp-has-aspect-ratio">...</figure>

アスペクト比を保ったままコンテンツをリサイズするには <body> 要素に wp-embed-responsive クラスが必要です。デフォルトでは設定されないため、テーマは responsive-embeds 機能をオプトインする必要があります。

add_theme_support( 'responsive-embeds' );

スペースの制御

いくつかのブロックはパディングの制御を持つことができます。この機能は標準で無効のため、テーマはサポートを宣言してオプトインする必要があります。

Some blocks can have padding controls. This is off by default, and requires the theme to opt in by declaring support:

add_theme_support('custom-spacing');

実験中の機能 – リンク色の制御

Gutenberg プラグイン Version 8.3 以上を使用すると、「段落」「見出し」「グループ」「カラム」「メディアとテキスト」ブロックのリンク色を制御できます。デフォルトでは無効のため、テーマはサポートを宣言してオプトインする必要があります。

add_theme_support('experimental-link-color');

オプトインする場合、テーマは experimental-theme.json 内に、なければテーマスタイル内に デフォルトのリンク色を定義する 必要があります。

{
    "global": {
        "styles": {
            "color": {
                "link": "hotpink"
            }
        }
    }
}

テーマがエディター、フロントエンドの両方のスタイルシートでリンクの色をスタイリングする場合、--wp--style--color--link CSS 変数にマップしてください。

a {
    color: var(--wp--style--color--link);
}

原文

最終更新日: