実案件で使える簡単ブロックスタイルの追加方法

この記事はSnow Monkey Advent Calendar 2021 23日目の記事です。

ブロックスタイル使ってますか?

いきなりですが、みなさんブロックスタイル使ってますか?

Snow Monkey の場合、段落ブロックにはデフォルト以外に、下に掲載しているようなブロックスタイルが用意されていたり、その他のブロックでもブロックごとにいろいろなブロックスタイルが用意されています。

アラート
Snow Monkey に用意されているブロックスタイル

アラート (サクセス)
Snow Monkey に用意されているブロックスタイル

アラート (ワーニング)
Snow Monkey に用意されているブロックスタイル

アラート (備考)
Snow Monkey に用意されているブロックスタイル

付箋
Snow Monkey に用意されているブロックスタイル

付箋 (細)
Snow Monkey に用意されているブロックスタイル

吹き出し
Snow Monkey に用意されているブロックスタイル

クリック一つで、ブロックにスタイルが適用される、とても便利な機能です。

ブロックスタイルは割と簡単に追加できるので、その方法を紹介したいと思います。

ブロックスタイルの追加方法

ブロックスタイルの追加は、次の3ステップ (普段から My Snow Monkey でカスタマイズされている方は2ステップ) でできます。

My Snow Monkey にコードを追加

my-snow-monkey.phpregister_block_style で、ブロックスタイルを設定する。
(子テーマの場合は、functions.php にコードを追加)

CSS を書く

My Snow Monkey の style.css 、または追加CSSにブロックスタイル用のCSSを書く。
register_block_style にインラインスタイルのCSSを設定することもできます。)

register_block_style

追加するブロックスタイルごとに次の形で、登録していきます。

register_block_style( $block_name, array( $style_properties ) );

register_block_style 関数は、最初の引数としてブロック名を受け取り、2番目の引数としてスタイルのプロパティを記述した配列を受け取ります。

$style_properties には、namelabel を含める必要があります。その他は必要に応じて使用します。

パラメータ

$block_name

名前空間を含むブロック名。'core/image' のように指定。

$style_properties

スタイルを示す配列を指定。

$style_properties の配列は次の通りです。

キー備考
‘name’スタイルのclass名必須
‘label’スタイルのラベル名(人間が読めるラベル。日本語も可。)必須
‘inline_style’インラインスタイルオプション
‘style_handle’wp_register_style 関数で登録したcssファイルのハンドル名オプション
‘is_default’trueに設定すると、デフォルトスタイルとして登録できます。
※ 自動的にスタイルが適応されるわけではありません。
エディター上で「デフォルト」のスタイルをクリックする必要があります。
オプション

画像ブロックにブロックスタイル「ドロップシャドー」を追加する場合

画像ブロックの $block_name は、'core/image' なので、以下のようなコードを my-snow-monkey.php に追加します。今回は、インラインスタイルでCSSを設定しています。

register_block_style(
	'core/image',
	array(
		'name'         => 'drop-shadow',
		'label'        => 'ドロップシャドー',
		'inline_style' => '.wp-block-image.is-style-drop-shadow img {
			box-shadow: rgb(136 136 136) 0 8px 16px 4px;
		}',
	)
);

My Snow Monkey に上記のコードを追加すると、画像ブロックに「ドロップシャドー」のスタイルが追加されます。

スタイルにドロップシャドーが追加される。

フロント側に出力される class は、'name' に指定した値に、is-class- が付いたものになります。

<figure class="wp-block-image size-large is-style-drop-shadow"><img ~省略~ /></figure>

今回の場合だと、'name' => 'drop-shadow' なので、.is-style-drop-shadow にCSSをあてます。

実際にこのサイトにも適用してみました。

デフォルトの状態
スタイルにドロップシャドーを設定した画像
.is-style-dorop-shadow

ブロックスタイルを追加しておくと、ワンクリックで画像にドロップシャドーが追加できます。

実際のコード例

<?php
/**
 * 実際のページ用の CSS 読み込み
 */
add_action(
	'wp_enqueue_scripts',
	function() {
		wp_enqueue_style(
			'my-snow-monkey',
			MY_SNOW_MONKEY_URL . '/style.css',
			[ Framework\Helper::get_main_style_handle() ],
			filemtime( MY_SNOW_MONKEY_PATH . '/style.css' )
		);
	}
);

/**
 * エディター用の CSS 読み込み
 *
 * クラシックエディターとブロックエディターの両方に CSS が読み込まれます。
 * ブロックエディターの場合は自動的に .editor-styles-wrapper でラップされます。
 * 依存関係は指定できません。
 */
add_action(
	'after_setup_theme',
	function() {
		add_theme_support( 'editor-styles' );
		add_editor_style( '/../../plugins/my-snow-monkey/style.css' );
	}
);

/**
 * Block Styles
 *
 * @link https://developer.wordpress.org/reference/functions/register_block_style/
 * @param string $block_name,
 * @param array  $style_properties
 */

if ( function_exists( 'register_block_style' ) ) {
	/**
	 * Register block styles.
	 */
	add_action(
		'init',
		function() {
			register_block_style(
				'core/heading',
				array(
					'name'         => 'title__primary',
					'label'        => 'プライマリー',
				)
			);
			register_block_style(
				'core/heading',
				array(
					'name'         => 'title__secondary',
					'label'        => 'セカンダリー',
				)
			);
			register_block_style(
				'core/group',
				array(
					'name'         => 'group__news',
					'label'        => 'ニュース',
				)
			);
			register_block_style(
				'core/image',
				array(
					'name'         => 'drop-shadow',
					'label'        => 'ドロップシャドー',
				)
			);
		}
	);
}

register_block_style は、以下のコードのようにフック無しでも動作します。

register_block_style(
	'core/heading',
	array(
		'name'         => 'title__primary',
		'label'        => 'プライマリー',
	)
);
register_block_style(
	'core/heading',
	array(
		'name'         => 'title__secondary',
		'label'        => 'セカンダリー',
	)
);
register_block_style(
	'core/group',
	array(
		'name'         => 'group__news',
		'label'        => 'ニュース',
	)
);
register_block_style(
	'core/image',
	array(
		'name'         => 'drop-shadow',
		'label'        => 'ドロップシャドー',
	)
);

参考リンク

コードリファレンス

Block Editor Handbook

まとめ

ブロックスタイルはクリック一つで、ブロックにスタイルが適用される、とても便利な機能です。

ブロックスタイルは register_block_style で割と簡単に追加できます。

register_block_style( $block_name, array( $style_properties ) );

$style_properties の、namelabel は、必須。その他は必要に応じて使用。

フロント側に出力される class は、'name' に指定した値に、is-class- が付く。

実案件の場合、「高度な設定」の「追加CSSクラス」にクラス名を設定してスタイルを当てることも多いと思いますが、何度も使用するスタイルがある場合、毎回一番下までスクロールして「高度な設定」を開いてクラス名を設定するのは、けっこう手間がかかります。

また、お客様によってはクラス名を設定すること自体、ハードルが高いという場合がありますが、そんな時にブロックスタイルを設定しておくとクリック一つでスタイルが適用されるので、「見出しにこのスタイルを設定する時は、ここをクリックしてください。」という説明で済みます。

よく使うスタイルをブロックスタイルでいくつか設定しておくと、制作スピードも上がり、お客様にも喜ばれますね。

追記

$block_name の正しいブロック名を見つけるには、ブロックエディターを開いた状態で、デベロッパーツールのコンソールを開いて wp.blocks.getBlockTypes() をたたくと、リストが表示されます。

2021年12月29日

register_block_style でスタイルを登録する時、実際の案件では単純に nameprimary secondary とせずに title__primary title__secondary のようにすることが多いので、実際のコード例を修正しました。

これは、 primary secondary は、 'core/heading' 以外でも使用することが多く、CSSの干渉を防ぐためです。

明日は…

Snow Monkey Advent Calendar 2021」24日目はキタジマさんの「久しぶりに新グッズをつくります(間に合ってくれ〜)」です。お楽しみに!