global-styles-inline-css との不毛な戦い

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.defaultPalettefalse にすると、ブロックエディタの管理画面からはデフォルトのカラーパレットは「見えなくなる」。でも、global-styles-inline-css のインラインCSSに、デフォルトのカラーパレットの分のCSS変数とかクラス名が「消えない」。

なーんーでーだーーーーー

ただまあ、そういうもんなんだろうな。とはいえ、目障りなので、デフォルトの theme.json にフックして、どうにか消してやろうとあれこれやってみた。という話でした。

参考情報

https://developer.wordpress.org/block-editor/reference-guides/filters/global-styles-filters/

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です