Gutenbergのブロックには値を調整できるフィールドをサイドーのブロックタブ部分に持たせる事ができます。
この記事ではこちらのようなフィールドを制作する方法を紹介します。
目次
InspectorControls
サイドバーへフィールドを追加するにはInspectorControlsコンポーネントを使用します。
@wordpress/block-editorからInspectorControlsをインポートし、メインとなるブロックのjsxとは並列にInspectorControlsコンポーネントを設置します。
ReactはrootNodeは1つですのでからタグを入れておきましょう。
import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; import { PanelBody } from '@wordpress/components'; export default function Edit({ attributes, setAttributes }) { return ( <> <InspectorControls> <PanelBody title={'フィールド名'}> </PanelBody> </InspectorControls> <div {...useBlockProps()}> block content </div> </> ); };
PanelBodyを使用する事でクリックで展開できるフィールドの塊を作る事ができます。
inputを制作し、テキストを入力可能にする
制作例としてinputフィールドを表示し、テキストを入力する事が出来るフィールドを制作してみます。
テキスト入力はTextControlコンポーネントを使用する事で制作可能です。
import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; import { PanelBody, TextControl } from '@wordpress/components'; export default function Edit({ attributes, setAttributes }) { const { url } = attributes; const saveUrl = (url) => { setAttributes({ url }); }; return ( <> <InspectorControls> <PanelBody title={'リンク先'}> <TextControl label="URL" value={url} onChange={saveUrl} /> </PanelBody> </InspectorControls> <div {...useBlockProps()}> block content </div> </> ); };
TextControlをインポートし、PanelBodyの子要素として配置します。
リンク先を入力する事が出来るフィールドという想定で、PanelBodyのタイトルはリンク先と記載しておきます。
onChangeで入力がある度にsaveUrl関数を実行し、saveUrl関数の中でsetAttributesを使い、値を保存します。
複数の入力フィールド
PanelBodyのセットをInspectorControlsに追加する事でクリック展開フィールドをいくつも用意する事がが可能です。
また、PanelBodyに入力フィールド内に入力コンポーネントを設置し複数の入力エリアを用意する事も可能です。
<InspectorControls> <PanelBody title={'リンク先'}> <TextControl label="URL1" value={url1} onChange={saveUrl1} /> <TextControl label="URL2" value={url2} onChange={saveUrl2} /> <TextControl label="URL3" value={saveUrl3} onChange={saveUrl3} /> ... </PanelBody> <PanelBody title={'色'}> <TextControl label="Color" value={color} onChange={saveColor} /> </PanelBody> ... </InspectorControls>