registerBlockType

  • Type: Function

すべてのブロックは、新しいブロックタイプの定義を登録することから始まります。登録するには、wp-blocksパッケージregisterBlockType関数を使用します。この関数は、ブロックnameとブロック設定オブジェクトの2つの引数を取ります。

Block Name

  • Type: String

ブロックの名前は、ブロックを識別するユニークな文字列です。名前はnamespace/block-nameの形式で構成する必要があり、namespaceはプラグインまたはテーマの名前です。

  1. // Registering my block with a unique name
  2. registerBlockType( 'my-plugin/book', {} );

注: ブロック名には小文字の英数字とダッシュのみを含めることができ、文字で始める必要があります。

注: この名前は、コメント区切りとして<!-- wp:my-plugin/book -->で使用されます。コアが提供するブロックは、シリアライズ時にnamespaceを含みません。

Block configuration

  • Type: Object [ { key: value } ]

ブロックを正常に登録するには、いくつかのプロパティを指定する必要があります。これらは、以下を含む設定オブジェクトを通じて定義されます:

title

  • Type: String

これは、ブロックの表示タイトルであり、私たちの翻訳関数を使用して翻訳できます。タイトルは、インサータやエディタの他の領域に表示されます。

  1. // Our data object
  2. title: __( 'Book' );

注: ブロックのタイトルをUIで読みやすく、アクセス可能に保つために、非常に長いタイトルは避けるようにしてください。

description (optional)

  • Type: String

これは、ブロックの短い説明であり、私たちの翻訳関数を使用して翻訳できます。これは、設定サイドバーのブロックタブに表示されます。

  1. description: __( 'Block showing a Book card.' );

category

  • Type: String [ text | media | design | widgets | theme | embed ]

ブロックは、ユーザーがそれらをブラウズし、発見するのを助けるためにカテゴリにグループ化されます。

コアが提供するカテゴリは次のとおりです:

  • text
  • media
  • design
  • widgets
  • theme
  • embed
  1. // Assigning to the 'widgets' category
  2. category: 'widgets',

プラグインとテーマもカスタムブロックカテゴリを登録できます。

icon (optional)

  • Type: String | Object

アイコンプロパティは、ブロックを識別しやすくするために指定する必要があります。これらは、WordPressのDashiconsのいずれか、またはカスタムsvg要素です。

  1. // Specifying a dashicon for the block
  2. icon: 'book-alt',
  3. // Specifying a custom svg for the block
  4. icon: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z" /><path d="M19 13H5v-2h14v2z" /></svg>,

注: カスタムSVGアイコンは、自動的にwp.primitives.SVGコンポーネントでラップされ、アクセシビリティ属性(aria-hiddenrolefocusable)が追加されます。

アイコンとしてオブジェクトも渡すことができ、この場合、上記で指定されたアイコンはsrcプロパティに含める必要があります。

srcの他に、オブジェクトは背景色と前景色を含むことができ、これらの色は、適用可能な場合にアイコンと共に表示されます。例: インサータ内で。

  1. icon: {
  2. // Specifying a background color to appear with the icon e.g.: in the inserter.
  3. background: '#7e70af',
  4. // Specifying a color for the icon (optional: if not set, a readable color will be automatically defined)
  5. foreground: '#fff',
  6. // Specifying an icon for the block
  7. src: <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z" /><path d="M19 13H5v-2h14v2z" /></svg>,
  8. } ,

keywords (optional)

  • Type: Array

時々、ブロックには、ユーザーが検索中にそれを発見するのを助けるエイリアスがあるかもしれません。たとえば、imageブロックはphotoによっても発見されることを望むかもしれません。これを行うには、用語の配列を提供します(翻訳可能です)。

  1. // Make it easier to discover a block with keyword aliases.
  2. // These can be localised so your keywords work across locales.
  3. keywords: [ __( 'image' ), __( 'photo' ), __( 'pics' ) ],

styles (optional)

  • Type: Array

ブロックスタイルは、ブロックに代替スタイルを提供するために使用できます。これは、ブロックのラッパーにクラス名を追加することによって機能します。CSSを使用して、テーマ開発者は、選択された場合にブロックスタイルのクラス名をターゲットにできます。

  1. // Register block styles.
  2. styles: [
  3. // Mark style as default.
  4. {
  5. name: 'default',
  6. label: __( 'Rounded' ),
  7. isDefault: true
  8. },
  9. {
  10. name: 'outline',
  11. label: __( 'Outline' )
  12. },
  13. {
  14. name: 'squared',
  15. label: __( 'Squared' )
  16. },
  17. ],

プラグインとテーマも、既存のブロックのためにカスタムブロックスタイルを登録できます。

attributes (optional)

  • Type: Object

属性は、ブロックの構造化データのニーズを提供します。シリアライズ時に異なる形式で存在することができますが、共通のインターフェースの下で一緒に宣言されます。

  1. // Specifying my block attributes
  2. attributes: {
  3. cover: {
  4. type: 'string',
  5. source: 'attribute',
  6. selector: 'img',
  7. attribute: 'src',
  8. },
  9. author: {
  10. type: 'string',
  11. source: 'html',
  12. selector: '.book-author',
  13. },
  14. pages: {
  15. type: 'number',
  16. },
  17. },

example (optional)

  • Type: Object

例は、ブロックのための構造化された例データを提供します。このデータは、ユーザーがブロックにマウスを乗せたときにインスペクターヘルプパネルに表示されるブロックのプレビューを構築するために使用されます。また、ブロックが選択されたときにスタイルパネルにも表示されます。

例オブジェクトで提供されるデータは、定義された属性と一致する必要があります。たとえば:

  1. example: {
  2. attributes: {
  3. cover: 'https://example.com/image.jpg',
  4. author: 'William Shakespeare',
  5. pages: 500
  6. },
  7. },

exampleが定義されていない場合、プレビューは表示されません。したがって、属性が定義されていなくても、空の例オブジェクトexample: {}を設定すると、プレビューが表示されます。

  1. ``````bash
  2. example: {
  3. attributes: {
  4. cover: 'https://example.com/image.jpg',
  5. },
  6. innerBlocks: [
  7. {
  8. name: 'core/paragraph',
  9. attributes: {
  10. /* translators: example text. */
  11. content: __(
  12. 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et eros eu felis.'
  13. ),
  14. },
  15. },
  16. ],
  17. },
  18. `

プレビューコンテナの幅をピクセル単位でviewportWidthを介して定義することも可能です。たとえば:

  1. example: {
  2. attributes: {
  3. cover: 'https://example.com/image.jpg',
  4. },
  5. viewportWidth: 800
  6. },

variations (optional)

  • Type: Object[]
  • Since: WordPress 5.9.0

ブロックのスタイルが宣言できるのと同様に、ブロックタイプは、ユーザーが選択できるブロックのバリエーションを定義できます。違いは、視覚的な外観を変更するだけでなく、このフィールドは、ブロックが挿入されるときに初期のカスタム属性と内部ブロックを適用する方法を提供します。詳細については、Block Variations APIを参照してください。

supports (optional)

  • Type: Object

supportsには、エディタで使用される機能を制御するためのオプションのセットが含まれています。詳細については、supportsドキュメントを参照してください。

transforms (optional)

  • Type: Object

Transformsは、ブロックがどのように変換されるか、または何に変換できるかのルールを提供します。ブロックは、別のブロック、ショートコード、正規表現、ファイル、または生のDOMノードから変換できます。各利用可能な変換についての詳細は、Block Transforms APIを参照してください。

parent (optional)

  • Type: Array

ブロックは、InnerBlocksを使用してネストされたコンテンツとして挿入できます。時には、ブロックを制限して、ネストされたブロックとしてのみ利用可能にすることが有用です。たとえば、「カートに追加」ブロックを「製品」ブロック内でのみ利用可能にしたい場合があります。

  1. ``````bash
  2. // Only allow this block when it is nested in a Columns block
  3. parent: [ 'core/columns' ],
  4. `

ancestor (optional)

  • Type: Array
  • Since: WordPress 6.0.0
  1. ``````bash
  2. // Only allow this block when it is nested at any level in a Columns block.
  3. ancestor: [ 'core/columns' ],
  4. `

allowedBlocks (optional)

  • Type: Array
  • Since: WordPress 6.5.0
  1. ``````bash
  2. // Only allow the Columns block to be nested as direct child of this block
  3. allowedBlocks: [ 'core/columns' ],
  4. `

blockHooks (optional)

  • Type: Object
  • Since: WordPress 6.4.0

Block Hooksは、ブロックが指定されたブロックタイプのすべてのインスタンスの隣に自動的に挿入されることを可能にするAPIです。相対的な位置も「フックされた」ブロックによって指定されます。つまり、ブロックは、指定されたブロックタイプの前または後、またはその最初または最後の子として挿入されることを選択できます(すなわち、子ブロックのリストにそれぞれ追加または挿入されます)。フックされたブロックは、フロントエンドとエディタの両方に表示されます(ユーザーによるカスタマイズを可能にするため)。

キーはフックするブロックの名前(string)であり、値はフックする位置(string)です。許可されるターゲット値は次のとおりです:

  • before – ターゲットブロックの前に注入します。
  • after – ターゲットブロックの後に注入します。
  • firstChild – ターゲットコンテナブロックの最初の内部ブロックの前に注入します。
  • lastChild – ターゲットコンテナブロックの最後の内部ブロックの後に注入します。
  1. {
  2. blockHooks: {
  3. 'core/verse': 'before',
  4. 'core/spacer': 'after',
  5. 'core/column': 'firstChild',
  6. 'core/group': 'lastChild',
  7. }
  8. }

Block Hooks機能は、静的ブロックベースのテンプレート、テンプレートパーツ、およびパターンでのみ機能するように設計されていることを強調することが重要です。パターンについては、テーマが提供するもの、Block Pattern Directoryからのもの、またはregister_block_patternへの呼び出しからのものが含まれます。

Block Hooksは、ユーザーによって作成された投稿コンテンツやパターン、同期パターン、またはユーザーによって変更されたテーマテンプレートやテンプレートパーツでは機能しません。

Block collections

registerBlockCollection

  • Type: Function

ブロックはコレクションに追加でき、同じ起源のすべてのブロックをグループ化します。

  1. <a name="namespace"></a>
  2. ### Namespace
  3. - **Type:** `````String

これは、ブロック名で宣言されたnamespaceと一致する必要があります。プラグインまたはテーマの名前です。

Settings

Title

  • Type: String

これは、ブロックインサータセクションに表示され、このコレクション内のすべてのブロックをリストします。

Icon

  • Type: Object

(オプション)ブロックインサータ内のタイトルの横に表示するアイコン。

  1. // Registering a block collection
  2. registerBlockCollection( 'my-plugin', { title: 'My Plugin' } );