フィールドブロックの使い方

フィールドブロックの表示例

フィールドブロックは「名前付きの入れ物」です。中に入れたブロックはその場所には表示されず、同じ名前のアクションフックブロックがある位置に出力されます。記事ごとに違う内容(キャッチコピー、価格、担当者名など)を、テンプレート側で決めた位置とデザインで表示したいときに使います。

実際の表示

このマニュアルは shitate pro blocks が動いているサイト上にあるので、以下は画像ではなく本物のブロックです。実際にクリックしたり開閉したりして動きを確かめてください。

↓ ここに、フック名「manual-demo」のアクションフックブロック(モード: フィールド)を置いています。

ここはフィールドブロック「manual-demo」の中に書いた文章です。フィールドブロックの位置には表示されず、下の「アクションフック manual-demo」の位置に出力されます。

できること

  • 本文の中に書いた内容を、テンプレート上の別の位置(ヘッダー直下、サイドバー、フッターなど)に表示する
  • 記事一覧(クエリループ)のカードごとに、各記事のフィールドの内容を表示する
  • PHP のフックで内容を加工してから表示する

基本的な使い方

  1. ブロック挿入ツールの「shitate advanced blocks」からフィールドを追加します。
  2. サイドバーの「Field name」にフィールド名を入力します。使えるのは小文字の英数字と - _ だけです(アクションフックと同じ制限)。
  3. ブロックの中に、表示したい内容を普通のブロック(段落・画像・リストなど)で入れます。
  4. 表示したい位置に、同じ名前のアクションフックブロック(モード「フィールド」)を置きます。テンプレートに置けば全記事共通の位置に、本文に置けばその記事の中の別の位置に出ます。

エディターでは、フィールドの枠に「Field: 名前」と表示されます。フロントでは、フィールドブロックの位置には何も出力されません。

エディターでの設定画面

フィールドブロックを選択した状態。フィールド名・クエリループ対応・PHP フックのパネルがあります。
フィールドブロックを選択した状態。フィールド名・クエリループ対応・PHP フックのパネルがあります。
出力先になるアクションフックブロック。同じ名前を入れます。
出力先になるアクションフックブロック。同じ名前を入れます。

設定項目

  • Field name(フィールド名) — 同じ名前のアクションフックブロックが出力先になります。名前を入れると誤操作防止のためロックされ、「Change name(名前を変更)」を押して確認するとロックが外れます。「Lock name」で再びロックできます。
  • Available in Query Loops(クエリループで利用可能にする) — オンにすると、アーカイブなどのクエリループ(クエリラップを含む)に置いた同名のアクションフックが、各項目の投稿からこのフィールドを取り出して出力します。オフのフィールドは一覧からは見えません(単一ページでの動作は変わりません)。オンのときはエディターに「Query Loop」バッジが付きます。
  • PHP hook パネル — 名前を入れると、そのフィールド用の add_action のひな形が表示されます。「Copy」ボタンでクリップボードにコピーして functions.php に貼り付けられます。

PHP で加工する

フィールド自体にはフィルターはありません。出力を変えたいときは、出力先であるアクションフックのフック sb_action_{名前} を使います。第 1 引数 $field にフィールドの HTML が入っています。

add_action( 'sb_action_catch', function ( $field, $attributes, $block, $post_id ) {
	// $field = このフィールドの HTML。echo すると出力を置き換える。
	echo '<p class="catch-copy">' . $field . '</p>';
}, 10, 4 );

何も echo しなければフィールドの内容がそのまま出力されるので、装飾が不要なら PHP を書く必要はありません。

仕組み(知っておくと迷わないこと)

  • 保存先は本文(post_content)です。カスタムフィールド(post meta)には保存されません。そのためフィールドの内容は通常のブロックと同じようにリビジョンに残り、検索の対象にもなります。
  • 単一ページでは、ページの描画前に本文中のフィールドをすべて先に集めてから各アクションフックに渡します。そのためフィールドとアクションフックの前後関係は問いません(フックの後ろにフィールドがあっても表示されます)。
  • クエリループの中では、各項目の投稿の本文から「クエリループで利用可能にする」がオンのフィールドだけを集めます。投稿ごとの解析は 1 リクエストにつき 1 回だけなので、同じ記事のフィールドを複数のフックで使っても負荷は増えません。
  • パスワード保護された投稿のフィールドは、保護中は出力しません。

よくある使い方

  • お客様の声・製品紹介のテンプレート化: 記事ごとに「会社名」「担当者」「一言」などのフィールドを置き、テンプレート側のレイアウトに同名のアクションフックを並べる。編集者は本文のフィールドを埋めるだけで、デザインは崩れません。
  • 記事一覧にキャッチコピー: 「クエリループで利用可能にする」をオンにしたフィールドを各記事に置き、一覧テンプレートのカード内にアクションフックを置く。
  • ページごとに違うヘッダー下のお知らせ: テンプレートのヘッダー直下にアクションフックを置き、必要なページの本文にだけ同名フィールドを置く。フィールドが無いページでは何も表示されません。

注意点

  • 同じ名前のフィールドを 1 つの投稿に複数置いた場合、後から集めたものが優先されます。1 投稿につき同名は 1 つにしてください。
  • フィールド名を後から変えると、出力先のアクションフック側も変える必要があります。名前がロックされているのはそのためです。
  • フィールドはその場に表示されないため、本文だけを読むと「消えた」ように見えます。編集者にはエディターの「Field: 名前」表示で場所を伝えてください。

タイポグラフィスケール

変更はこのページに即時反映され、あなたのブラウザ内にだけ記憶されます。サイト側には何も保存されません。

比率が大きいほど見出し間のコントラストが強くなります(typescale.com と同じ考え方)。

画面幅 375px で使う比率。1260px までにメイン比率へなめらかに変化し、メディアクエリなしでスマホでは文字も余白も引き締まります。

本文の文字サイズ。スケール全体はここから計算されます。

すべての文字段を偶数ピクセル(2px)にスナップします。

Small / X-Small / XX-Small を比率で割らず 0.95rem / 0.8rem / 0.75rem に固定します(比率で割ると小さすぎて読みにくくなる場合の対策)。

この画面幅での実サイズ
Display / H1 –
Huge / H2 –
Extra Large / H3 –
Large / H4 –
Medium / 本文 –
Small / H6 –
X-Small –
XX-Small –