Open42

WordPressのブロックテーマつくるメモ

ピン留めされたアイテム
ちあきちあき

ハイブリットテーマに変えると、theme.json で css のとこに書いてたやつは適用されなくなる。
もうCSSはtheme.jsonにせずに大人しくCSSファイルに書くほうがよいのかなあ…

ちあきちあき

デザイン見ながらまずはtheme.json を設定する

{
	"$schema": "https://schemas.wp.org/trunk/theme.json",
	"version": 2,
	"settings": {
		"color": {
			"defaultPalette": false,
			"palette": [
				{
					"name": "Black",
					"slug": "black",
					"color": "#000000"
				},
				{
					"name": "White",
					"slug": "white",
					"color": "#ffffff"
				},
				{
					"name": "Gray / 800",
					"slug": "gray-800",
					"color": "#1f2937"
				},
				{
					"name": "Gray / 700",
					"slug": "gray-700",
					"color": "#374151"
				},
				{
					"name": "Gray / 600",
					"slug": "gray-600",
					"color": "#4b5563"
				}
			]
		},
		"layout": {
			"contentSize": "1024px",
			"wideSize": "1600px"
		},
		"spacing": {
			"padding": true,
			"margin": true,
			"units": ["%", "px", "em", "rem", "vh", "vw"]
		}
	},
	"styles": {},
	"patterns": []
}
ちあきちあき

$schema 設定してると補完してくれていのちたすかる(PhpStorm)

ちあきちあき

スタイルを設定する前にフォントサイズとかカラーとか設定しておくといい。

色ならvar(--wp--preset--color--◯◯)、フォントサイズならvar(--wp--preset--font-size--◯◯)みたいな感じで変数がつかえる。

ちあきちあき

こういうtheme.json で設定できる値はCSSで握りつぶさない。(管理画面から触ることを大前提にする)

ちあきちあき

メディアクエリでCSS調整するより clamp でやるのがよさそうかも。
推奨値は 最小のフォントサイズ ÷ 最小のフォントサイズの画面サイズ ✕ 100 = vwの値 で計算が楽そう

ちあきちあき

途中で意図せずスコーンとリキッドにならなくなるところがあるのでこの計算式だとだめそう

ちあきちあき

最大幅はひとまずはテキストとかを表示してるメインエリアを基準にするとよさそう

ちあきちあき

背景画像とか使いたいときは別のCSSファイルを用意する。
wp_enqueue_block_style を使って読み込ませる。

function theme_init(): void {
	wp_enqueue_block_style(
		'core/heading',
		array(
			'handle' => 'custom-heading-style',
			'src'    => get_theme_file_uri( 'assets/blocks/core-heading.css' ),
			'path'   => get_theme_file_path( 'assets/blocks/core-heading.css' ),
		)
	);
}

add_action( 'init', 'theme_init' );

見出し類は core/heading。基本的にブロックの name がここに該当しそう

https://github.com/WordPress/gutenberg/blob/trunk/packages/block-library/src/heading/block.json#L4

ちあきちあき

wp_enqueue_block_style はページ上で該当するブロックが使われてるときだけそのCSSを呼び出せる。(インラインで記述)=CSSの読み込む量を減らせる

だからブロックのCSSはwp_enqueue_block_styleを使うのを推奨されてる

ちあきちあき

CSSのビルドをどうするか考える。

  • body だとか tailwind とかのフレームワークのCSS読み込み用のCSSは必要
  • wp_enqueue_block_style ではブロック単位でCSSを作るので1つにまとめるとかはいらない。そもそもビルドもいらないのでは?という気もする
ちあきちあき

CSSファイル(だけじゃないけど)とかは同じフォルダで一元管理したいから、
ビルド不要(※かも)のCSSファイルだけビルド後だったり別フォルダに置くとかはなし

ちあきちあき

ブロック用のCSSはこれを参考に自動でentryに指定させることにする

https://qiita.com/masato_makino/items/7130bbe408ca929e7f0d

webpack.config.jsはこんなかんじに。

const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );
const path = require( 'path' );
const glob = require( 'glob' );

/**
 * 各ブロックのCSSファイルをentryに追加するためのオブジェクトを作成
 */
const blockStyleDir = 'src/styles';
const blockEntries = glob
	.sync( 'blocks/*', {
		cwd: blockStyleDir,
	} )
	.map( function ( key ) {
		return [
			key.replace( '.css', '' ),
			path.resolve( process.cwd(), blockStyleDir, key ),
		];
	} );
const blockEntriesObj = Object.fromEntries( blockEntries );

module.exports = {
	...defaultConfig,
	entry: {
		...{ theme: path.resolve( process.cwd(), 'src/', 'theme.js' ) },
		...blockEntriesObj,
	},
	plugins: [ ...defaultConfig.plugins ],
};
ちあきちあき

core/button とか内部のリンクをカスタマイズしたいときは、

            "core/button": {
                "elements": {
                    "link": {
                        "color": {
                            "text": "#ffffff",
                            "background": "#000000"
                        }
                    }
                }
            }

みたいなかんじで書けそう

ちあきちあき

core/button ならlinkのカラーとかホバーだけ elements で設定して、その他(余白とかフォントサイズとか)は core/button でよい

ちあきちあき

うーん、css が効いてないような感じがする。あとで要検証

ちあきちあき

.css でもちゃんとPostCSSでビルド通るけど、ネストだったりなんだりのプラグインまでは入ってないので、必要ならpostcss.config.jsとかでPostCSS Preset Envをいれる

ちあきちあき

spacing は規則性があれば spacingScale で書けるけど、step の数が多くなると画像みたいな感じになっちゃうから大人しくspacingSizes で一個ずつ書いていくほうがよさそう

ちあきちあき

テーマで parts -> header 作ってるとパターンのヘッダーの中にあるやつと混同しがちになってしまうけど、これは「テンプレートパーツのヘッダー」だからパターンとは別のもの

ちあきちあき

theme.json 内の css の扱いにちょっとなやむ。theme.json でまとめちゃうほうが「どこ見たらいいっけ?」ってならなそう(CSSフォルダ見たりtheme.json 見たりが若干手間では?と思ってる)

でも、たくさん書くと可読性なにそれおいしいの?ってなるし、画像の取り扱いだったりメディアクエリーだったりはCSSファイルのほうがいい。それならいっそ css は使わずにCSSファイルで扱う?

ちあきちあき

ボタンブロック、管理画面からだと上下と左右のpaddingしか設定できないな?
横に矢印アイコンつけたときとか右だけpadding広めにしたいとかはどうするのがいいかな

ちあきちあき

管理画面で設定した値+◯%みたいな書き方ができたらいいのに

ちあきちあき

https://github.com/WordPress/gutenberg/issues/49406

メディアとテキスト、間隔はblockGapで調整させてほしい……コンテンツ側のpaddingを握りつぶすしかない

ちあきちあき

管理画面で設定できるpaddingとmarginは.wp-block-media-text に対するものなので、.wp-block-media-text__content に対するCSSは握りつぶすのは許容する?
でも、カラムがマージン→gapに変わったようにここもgapに変わる可能性がなきにしもあらずだから、あんまりがっつりコアのCSSを触るのはやめた方がいいかもしれない。(ゆくゆくのメンテナンスコストを考えて)

それはそれとしていい案が思いつかない

ちあきちあき

ボタンならべたときにボタンの高さを合わせるのが結構むずい気がする