エディター内のブロック
ブロックエディターは React シングルページアプリケーション (SPA) です。エディター内のすべてのブロックは、クライアントでのブロック登録に使用される settings オブジェクトの edit
プロパティで定義された、React コンポーネント経由で表示されます。
ブロックの Edit
React コンポーネントが受け取る props
オブジェクトは以下を含みます。
attributes
: ブロックスのすべての属性オブジェクトsetAttributes
: 属性オブジェクトを更新するメソッドisSelected
: ブロックが現在選択されているかどうかを示すブール値
WordPress にはエディター内のブロックのインターフェイスを定義する、多くの組み込み標準コンポーネントがあります。これらの組み込みコンポーネントは、@wordpress/components
や @wordpress/block-editor
などのパッケージから利用できます。
WordPress Gutenberg プロジェクトでは、WordPress パッケージで利用可能なユーザーインターフェイスコンポーネントのドキュメントに、Storybook を使用しています。
ブロックツールバーや設定サイドバーのブロックのカスタム設定コントロールもまた、次のような組み込みコンポーネントを介して、Edit
React コンポーネント経由で定義できます。
組み込みコンポーネント
パッケージ @wordpress/components
には、ブロックエディターと WordPress ダッシュボード用の共通 UI 要素を作成する、汎用 WordPress コンポーネントのライブラリが含まれています。このパッケージでよく使用されるコンポーネントです。
パッケージ @wordpress/block-editor
にはブロックエディター用のコンポーネントとフックのライブラリが含まれ、そこにはブロックのカスタム設定コントロールを定義するものもあります。このパッケージでよく使用されるコンポーネントです。
RichText
BlockControls
InspectorControls
InnerBlocks
PanelColorSettings
またはColorPalette
パッケージ
@wordpress/block-editor
にはまた、スタンドアロンブロックエディターを作成し、使用するためのツールも含まれます。
ブロックエディター用のコンポーネントを使用する際の、良いワークフローは、
- WordPress のパッケージからコンポーネントをインポートする。
- コンポーネントに対応するコードを JSX 形式でプロジェクトに追加する。
- ほとんどの組み込みコンポーネントは、ブロック属性の設定に使用される。このため、
block.json
で必要な属性を定義し、コンポーネントのsetAttributes
でその属性を更新するイベントハンドラを作成する。 - 必要であれば、コードをシリアライズして、データベースに格納できるようにする。
ブロックコントロール: ブロックツールバーと設定サイドバー
ブロックのカスタマイズを簡素化し、一貫したユーザー体験を保証するため、ブロックのエディタープレビュー生成を支援するいくつかの組み込み UI パターンがあります。
下図は、選択した段落ブロックのブロックツールバーと設定サイドバーの詳細です。
ブロックツールバー
ユーザーがブロックを選択すると、選択されたブロックの上のツールバーに、多くのコントロールボタンが表示されます。このうちブロックレベルのコントロールのいくつかは自動的に表示されますが、ツールバーをカスタマイズしてブロックタイプに固有のコントロールを挿入できます。ブロックタイプの edit
関数の戻り値に BlockControls
要素を含めると、選択したブロックのツールバーにそのコントロールが表示されます。
export default function Edit( { className, attributes: attr, setAttributes } ) {
const onChangeContent = ( newContent ) => {
setAttributes( { content: newContent } );
};
const onChangeAlignment = ( newAlignment ) => {
setAttributes( {
alignment: newAlignment === undefined ? 'none' : newAlignment,
} );
};
return (
<div { ...useBlockProps() }>
<BlockControls>
<ToolbarGroup>
<AlignmentToolbar
value={ attr.alignment }
onChange={ onChangeAlignment }
/>
</ToolbarGroup>
</BlockControls>
<RichText
className={ className }
style={ { textAlign: attr.alignment } }
tagName="p"
onChange={ onChangeContent }
value={ attr.content }
/>
</div>
);
}
上のコードを含む、完全なブロックのサンプルプログラムを参照してください。
なお、BlockControls
はブロックが選択されていて、ビジュアル編集モードのときのみ表示されます。HTML 編集モードでブロックを編集しているときは BlockControls
は表示されません。
設定サイドバー
設定サイドバーは、使用頻度の低い設定や、大きな画面領域を必要とする設定の表示に使用されます。設定サイドバーは、ブロックレベルの設定のみに使用し、ブロックを選択すると表示されます。
ブロック内の選択したコンテンツにのみ影響する設定、たとえばテキストの「太字」などは、設定サイドバー内に配置しないでください。代わりにツールバーを使用してください。設定サイドバーは HTML モードでブロックを編集しているときにも表示されます。このため、ブロックレベルの設定のみを配置してください。
ツールバーのレンダリングと同様に、ブロックタイプの edit
関数の戻り値に InspectorControls
要素を含めると、コントロールが設定サイドバー領域に表示されます。
export default function Edit( { attributes, setAttributes } ) {
const onChangeBGColor = ( hexColor ) => {
setAttributes( { bg_color: hexColor } );
};
const onChangeTextColor = ( hexColor ) => {
setAttributes( { text_color: hexColor } );
};
return (
<div { ...useBlockProps() }>
<InspectorControls key="setting">
<div>
<fieldset>
<legend className="blocks-base-control__label">
{ __( 'Background color', 'block-development-examples' ) }
</legend>
<ColorPalette // Element Tag for Gutenberg standard colour selector
onChange={ onChangeBGColor } // onChange event callback
/>
</fieldset>
<fieldset>
<legend className="blocks-base-control__label">
{ __( 'Text color', 'block-development-examples' ) }
</legend>
<ColorPalette
onChange={ onChangeTextColor }
/>
</fieldset>
</div>
</InspectorControls>
<TextControl
value={ attributes.message }
onChange={ ( val ) => setAttributes( { message: val } ) }
style={ {
backgroundColor: attributes.bg_color,
color: attributes.text_color,
} }
/>
</div>
);
}
上のコードを含む、完全なブロックのサンプルプログラムを参照してください。
ツールバーとサイドバーの両方でレンダーされるブロックコントロールは、同じタイプの複数のブロックが選択されている場合にも利用できます。
色、ボーダー、スペースのカスタマイズなどを含む、一般的なカスタマイズ設定については、ブロックサポートを使用すると、より効率的な方法で、同じ機能を提供できます。
その他の情報
- Storybook for WordPress components
- @wordpress/block-editor
- @wordpress/components
InspectorControls
BlockControls
最終更新日: