WordPressのtheme.json
ファイルにsettings.layout
の設定を追加することで、テーマのレイアウトを詳細にカスタマイズできます。
settings.layout
以下のコードは、settings.layout
に関する全体的な設定を示しています。この設定によって、標準コンテンツ領域の幅や幅広のサイズ、さらにカスタマイズの可否を制御することが可能です。
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 3,
"settings": {
"layout": {
"contentSize": "800px",
"wideSize": "1200px",
"allowCustomContentAndWideSize": true,
"allowEditing": true
}
}
}
theme.jsoncontentSize
contentSize
プロパティは、ブロック生成時にデフォルトで適用される横幅を指定します。
{
"settings": {
"layout": {
"contentSize": "800px"
}
}
}
theme.jsonこの設定では、コンテンツの幅を800ピクセルに設定しています。この設定により、ページのメインコンテンツエリアのサイズが統一され、デザインの整合性が保たれます。
出力されるCSS変数
contentSize
プロパティを指定すると、WordPressのエディタとフロントエンドに以下のCSS変数が生成されます。
/* エディタ */
.editor-styles-wrapper {
--wp--style--global--content-size: 800px;
}
/* フロントエンド */
:root {
--wp--style--global--content-size: 800px;
}
CSSwideSize
wideSize
プロパティは、幅広表示される要素の最大幅を指定します。
{
"settings": {
"layout": {
"wideSize": "1200px"
}
}
}
theme.jsonこの設定では、全幅表示のコンテンツが最大で1200ピクセルの幅に広がるように設定されています。これにより、画面全体に広がる要素のサイズが制御され、大きなビジュアルコンテンツを表示できます。
出力されるCSS変数
wideSize
プロパティを指定すると、WordPressのエディタとフロントエンドに以下のCSS変数が生成されます。
/* エディタ */
.editor-styles-wrapper {
--wp--style--global--wide-size: 1200px;
}
/* フロントエンド */
:root {
--wp--style--global--wide-size: 1200px;
}
CSS付与されるクラス
幅広が選択されたときに、alignwide
のクラスが付与されエディタで使用される以下のスタイルが適用されます。
/* エディタ */
.editor-styles-wrapper .block-editor-block-list__layout.is-root-container > .alignwide {
max-width: 1200px;
}
CSSallowCustomContentAndWideSize
allowCustomContentAndWideSize
プロパティは、ユーザーがテーマの設定画面からコンテンツ幅や全幅表示の幅を自由にカスタマイズできるかどうかを制御します。
{
"settings": {
"layout": {
"allowCustomContentAndWideSize": true
}
}
}
theme.jsonこのプロパティをtrue
に設定すると、ユーザーは自由な横幅を指定できます。一方、false
に設定すると、ユーザーはcontentSize
、wideSize
、および「全幅」から横幅を選択する必要があります。
trueを設定した場合の表示
多くの配布テーマは、カスタム幅を許可するためにこの設定をtrue
にしていますが、一部のクライアント向けに制作したオリジナルテーマでは、決められたレイアウトを維持してほしい場合があるため、意図的にfalse
を設定することもあります。
allowEditing
allowEditing
プロパティは、テーマ内のレイアウト設定が編集可能かどうかを制御します。
{
"settings": {
"layout": {
"allowEditing": true
}
}
}
theme.jsonこのプロパティをtrue
に設定すると、サイドバーにレイアウトの項目が表示されますが、false
に設定すると、レイアウトの項目は非表示になります。
trueを設定した場合の表示
この設定も、allowCustomContentAndWideSize
と同様に、一部のクライアント向けに項目を非表示にするために使用されることがあります。
useRootPaddingAwareAlignments
useRootPaddingAwareAlignments
プロパティは、settings.layout
に直接設定するものではありませんが、密接な関連があるためここで紹介します。
このプロパティは、styles.spacing.padding
を使用した際、通常はbody
タグに付く余白を、グループブロックやカバーブロックなどの全幅指定されたブロックにも適用できるようにします。
{
"settings": {
"useRootPaddingAwareAlignments": true
},
"styles": {
"spacing": {
"padding": {
"left": "15px",
"right": "15px"
}
}
}
}
theme.jsonuseRootPaddingAwareAlignments
プロパティを有効化すると、以下のCSS変数とクラスを出力します。
/* エディタ */
.editor-styles-wrapper {
--wp--style--root--padding-top: 0px;
--wp--style--root--padding-right: 15px;
--wp--style--root--padding-bottom: 0px;
--wp--style--root--padding-left: 15px;
}
.editor-styles-wrapper .has-global-padding {
padding-right: var(--wp--style--root--padding-right);
padding-left: var(--wp--style--root--padding-left);
}
/* フロントエンド */
body {
--wp--style--root--padding-top: 0;
--wp--style--root--padding-right: 15px;
--wp--style--root--padding-bottom: 0;
--wp--style--root--padding-left: 15px;
}
.has-global-padding {
padding-right: var(--wp--style--root--padding-right);
padding-left: var(--wp--style--root--padding-left);
}
CSSフロントエンドの横幅を指定する
settings.layout
の設定は、WordPressのエディタには自動で反映されますが、フロントエンドには自分で設定を反映させる必要があります。また、厄介な点として、この設定には明確な正解がなく、サイトやテーマの設計方針によって異なる設定が採用されることがあります。そのため、ここで紹介するサンプルコードはあくまで参考程度にご覧ください。
<div class="wrapper">
<?php if(have_posts()): ?>
<?php while(have_posts()): the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
</div>
PHP{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 3,
"settings": {
"useRootPaddingAwareAlignments": true,
"layout": {
"contentSize": "800px",
"wideSize": "1200px",
"allowCustomContentAndWideSize": true,
"allowEditing": true
}
},
"styles": {
"spacing": {
"padding": {
"left": "15px",
"right": "15px"
}
}
}
}
theme.json.wrapper {
padding-left: var(--wp--style--root--padding-left);
padding-right: var(--wp--style--root--padding-right);
> * {
max-width: var(--wp--style--global--content-size);
margin-left: auto;
margin-right: auto;
}
> .alignwide {
max-width: var(--wp--style--global--wide-size);
}
> .alignfull {
max-width: none;
margin-left: calc(var(--wp--style--root--padding-left) * -1);
margin-right: calc(var(--wp--style--root--padding-right) * -1);
}
}
SCSS