サイトエディタで投稿、固定ページの作成 編集が可能になっています。
Version 16.0.0 では、サイトエディタに command center を使って投稿や、固定ページの新規作成や、編集が可能になっています。
これまでは以下左のスクリーンショットのように、テンプレートを変更しても全体がどのように変化したかを確認することはできませんでしたが、サイトエディタの投稿編集画面では、テンプレートが適用された状態で投稿の編集を行うことができます。
また、コマンドセンターに、addと入力すれば、投稿や固定ページの新規作成を行うことができます。
サイトエディタの編集画面とブロックエディタの編集画面の違い
クラッシックテーマでは、固定ページテンプレート、テンプレート階層に基づくテンプレートは、どちらかといえばテーマ開発者が使用するものでしたが、サイトエディタの登場によって、テンプレートがユーザーに身近な機能になりつつあります。
WordPressのテンプレート階層や固定ページテンプレートの理解は初心者には少し難しい面もあると思いますが、覚えれば様々な様式を作成できる機能なので、この機会に理解を深めておくといいかもしれませんね。(テンプレート階層はクラッシック時代のPHPテンプレートの命名規則ですが、ブロックテーマのhtmlテンプレートも、このテンプレート階層をベースに動作します)
新たに直面した問題
gutenberg 16.1.0では、Style Book でブロックをクリックしても、正常に動作しない
まだ不安定なようなので、今後の様子を見ることにします。
WordPress 6.3では、theme.json/settings/layout/definitions は廃止???
gutenberg 16.1.0
サイトのレイアウトが、以下のように崩れた
wp-block-buttons の幅がなくなり、サイドバーの位置がalign-items:flex-start;から、centerに変更になる。
gutenberg 16.0.0で再現すると
これらの変化がどのようにして発生したのかを調べてみた。
結論から言うと、theme.jsonで設定したdefinitions設定が上書きされなくなったために発生したと思われます。
{
"settings": {
"layout": {
"definitions": {
"constrained": {
"baseStyles": [
...
{
"selector": " > *",
"rules": {
"width": "var(--wp--custom--width--content)",
"max-width": "100%",
"margin-left": "auto",
"margin-right": "auto"
}
}
...
}
}
"flex": {
"baseStyles": [
{
"selector": "",
"rules": {
"align-items": "flex-start",
"justify-content": "center;",
"clear": "both",
"float": "none",
"margin": "var(--wp--custom--margin--block)"
}
},
]
}
}
}
}
}
definitionsは、公に許可されたものではありませんが、上書きができなくなると、テーマのスタイル定義に壊滅的な影響を与える可能性があります。
なぜ、このテーマはdefinitions を使用しているのか
デフォルトの状態の場合.上記の赤文字部分の設定は、以下のようになっています。
plugins/gutenberg/lib/theme.json
"selector": " > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
"rules": {
"max-width": "var(--wp--style--global--content-size)",
"margin-left": "auto !important",
"margin-right": "auto !important"
}
},
この設定は、以下のスタイルを生成します。
body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
max-width: var(--wp--style--global--content-size);
margin-left: auto !important;
margin-right: auto !important;
}
ご覧のように、widthの設定はなく、max-widthがあるだけです。
なぜ、width を使用せず max-widthを使用しているのでしょうか?
このような指定がデフォルト設定で行われた場合、テーマはwidth:auto(つまりデフォルト)のみしか使用できなくなります。
widthがpx設定を持っていると、多くの場合モバイルブラウザなどで表示崩れが発生します。
definitionsが上書きできた場合のCSS これまでは、これに置き換えられていた。
body .is-layout-constrained > * {
max-width: 100%;
margin-left: auto;
margin-right: auto;
width: var(--wp--custom--width--content);
}
一方ブロックエディタの編集画面でのスタイルは、どうなっているでしょうか?
.editor-styles-wrapper * {
max-width: 100%!important;
}
このように、theme.jsonの設定は、完全に打ち消されています。
このようなことから、max-widthを使用することにはやや問題があるという事を、コアのデベロッパーも気づいているみたいなので、そのうちこれらは修正されるだろうと思いつつ、difinitionsで、当面は逃げていこうと考えていたわけです。
margin-left:auto !important; margin-right:auto !important;
このimportant指定も、詳細度が高すぎるため、importantは外して、テーマで矛盾をオーバライドしやすく変更していました。
aliginleft等、回り込みブロックの後方にある is-layout-flexブロックは、display:blockを使ったブロックとのマージンの計算方法が異なるために、位置ずれが発生するとか、
仮に、display:inline-block display:inline-flex等の場合には、margin:autoは効かなくなるため、別途オーバーライドする必要があるためです。
しょうもないことを、長々書きましたが、gutenberg 16.1.0 では、このテーマはレイアウトが破綻します。今後オーバーライドが有効になる事を切に祈ります。
今後、difinitionsが、どういう事になるのかしばらく見てから、CSSで対応すべきか検討したいと思います。
beta2 wp-includes/block-supports/layout.phpにヒントがありそう。
emulsion 2.7.9 変更
emulsion addons プラグインを使用した場合、その投稿がどのテンプレートを使用しているかを表示する機能がありましたが、テンプレートファイルへのリンクに加えて、投稿をエディタで編集するためのリンクを追加することにしました。
theme.json の layout definitions の変更への対応
gutenberg 16.0 + emulsion 2.7.8 迄、definitionsは(emulsion 2.5.4~ 約9か月間)使用してきました。これまで、コアのレイアウトスタイルをテーマ側で安定して上書き可能にする唯一の方法でしたが、WordPress 6.3で機能が変更になる模様です。
いろいろ模索しましたが、新しい機能(layout.php)では、上書きを行う方法は現在のところ見つかっていません。
固執していても仕方がないので、fse.css でルールセットを記述し直して対応することにしました。theme.jsonのdefinitionsの項目は、当面そのまま維持しますが、実質的には、fse.cssの設定で動作します。
グループブロックにバグがありました。修正します。
Note
サイトエディタ投稿編集画面について
サイトエディタの編集画面のスクリーンショットを見ると、サイトヘッダー、アイキャッチ画像は、投稿ヘッダーが、720px 本文部分が920pxになっています。
サイトエディタ編集画面は、iframeで構成されています。emulsionテーマは、body要素クラスに、テンプレートの種類等を表すクラスを使用していますが、サイトエディタのbody要素に、これらのクラスがないためスタイルを割り付けることができないでいます。 これは、すぐには解決できる問題ではありません。
代替え機能を追加することにしました。
emulsion 2.7.9 では、テンプレートパーツのコンテンツをロックします。(ロックしても、幅の変更は可能ですが、変更はテンプレートパーツの変更として保存されますので、変更が他のテンプレートにも反映されます。)
テンプレートパーツに、以下のようにブロックスタイルバリエーションを追加しました。(この設定は、テンプレートの変更として保存されるので、幅の変更は他のテンプレートに影響しません)