フィールドブロックは「名前付きの入れ物」です。中に入れたブロックはその場所には表示されず、同じ名前のアクションフックブロックがある位置に出力されます。記事ごとに違う内容(キャッチコピー、価格、担当者名など)を、テンプレート側で決めた位置とデザインで表示したいときに使います。
実際の表示
このマニュアルは shitate pro blocks が動いているサイト上にあるので、以下は画像ではなく本物のブロックです。実際にクリックしたり開閉したりして動きを確かめてください。
↓ ここに、フック名「manual-demo」のアクションフックブロック(モード: フィールド)を置いています。
ここはフィールドブロック「manual-demo」の中に書いた文章です。フィールドブロックの位置には表示されず、下の「アクションフック manual-demo」の位置に出力されます。
できること
- 本文の中に書いた内容を、テンプレート上の別の位置(ヘッダー直下、サイドバー、フッターなど)に表示する
- 記事一覧(クエリループ)のカードごとに、各記事のフィールドの内容を表示する
- PHP のフックで内容を加工してから表示する
基本的な使い方
- ブロック挿入ツールの「shitate advanced blocks」からフィールドを追加します。
- サイドバーの「Field name」にフィールド名を入力します。使えるのは小文字の英数字と
-_だけです(アクションフックと同じ制限)。 - ブロックの中に、表示したい内容を普通のブロック(段落・画像・リストなど)で入れます。
- 表示したい位置に、同じ名前のアクションフックブロック(モード「フィールド」)を置きます。テンプレートに置けば全記事共通の位置に、本文に置けばその記事の中の別の位置に出ます。
エディターでは、フィールドの枠に「Field: 名前」と表示されます。フロントでは、フィールドブロックの位置には何も出力されません。
エディターでの設定画面


設定項目
- 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: 名前」表示で場所を伝えてください。
