global-styles-inline-css に書き出される、デフォルトの preset が目障りで、何とか消せないか、色々足掻いた結果、という話。
//theme.json
{
"settings": {
"color": {
"defaultPalette": false,
"defaultGradients": false,
"customGradient": false,
"defaultDuotone": false,
"customDuotone": false
},
"shadow": {
"defaultPresets": false
}
}
}
//functions.php
/**
* デフォルトの theme.json にフックして書き換え
*
* @url https://developer.wordpress.org/block-editor/reference-guides/filters/global-styles-filters/
*/
function filter_theme_json_theme( $theme_json ){
$new_data = array(
'version' => 2,
'settings' => array(
'color' => array(
'duotone' => array(), //no use
'gradients' => array(), //no use
'palette' => array(), //no use
),
'typography' => array(
'fontSizes' => array(), //no use
),
'spacing' => array(
//'spacingSizes' => array(), //<- 効かない
'spacingScale' => null, //no use
),
'shadow' => array(
'presets' => array(), //no use
),
),
);
return $theme_json->update_with( $new_data );
}
add_filter( 'wp_theme_json_data_default', 'filter_theme_json_theme' );
マジで不毛なので、良い子は真似しないでね。
追記
公開してから、めっちゃ追記するんですけども。
global-styles-inline-css とは
theme.json から書き出されるインラインCSSという認識です。なんか、とりあえず、何にもしなかったら、クラシックテーマでも書き出されちゃうものじゃなかったかなと思います。テーマに theme.json 置いてなくても、デフォルトの thme.json を元に書き出されるという認識でいる。
これを全く書き出さないようにする方法もあるけど、そこまで逆らう気力はなくなったこの頃。人は変わる。
暇があったら別途記事にします。
theme.json の「階層」
コアにデフォルトの theme.json があって、テーマの theme.json はそれを「上書き」できる。・・・というのを、しれっと受け取ってしまうけど、上書きできるっていうてことは、どっかでマージしたりとかそういう機能があるってことでして。
ちなみに、ユーザ(管理画面)のカスタマイズでさらに上書きが可能。
上書き、、、とはいうものの、上書きできるものと、追加しかできないものもある。なんとなく、プロパティの値が真偽値だったら、上書きできてるけど、配列のものとかは、実は「追加」って扱いになってて、デフォルトの設定は「変わってない」って印象がある。
例えば、カラーパレット。
theme.json で settings.color.defaultPalette
を false
にすると、ブロックエディタの管理画面からはデフォルトのカラーパレットは「見えなくなる」。でも、global-styles-inline-css のインラインCSSに、デフォルトのカラーパレットの分のCSS変数とかクラス名が「消えない」。
なーんーでーだーーーーー
ただまあ、そういうもんなんだろうな。とはいえ、目障りなので、デフォルトの theme.json にフックして、どうにか消してやろうとあれこれやってみた。という話でした。
参考情報
https://developer.wordpress.org/block-editor/reference-guides/filters/global-styles-filters/