PHPによるブロックの登録(サーバーサイド)

サーバー上でのブロック登録は通常、メインプラグインPHPファイル内でregister_block_type()関数がinitフックで呼び出されることで行われます。この関数は、block.jsonファイルに保存されたメタデータを読み取ることで、ブロックタイプの登録を簡素化します。

この関数はブロックタイプを登録するために設計されており、この文脈では主に2つのパラメータを使用しますが、より多くのバリエーションにも対応できます:

  • $block_type (string): これは、block.jsonファイルを含むディレクトリへのパス、または異なる名前のメタデータファイルへの完全なパスのいずれかです。このパラメータは、WordPressにブロックの設定を見つける場所を指示します。
  • $args (array): これはオプションのパラメータで、ブロックタイプの追加引数を指定できます。デフォルトでは空の配列ですが、$render_callbackなどのさまざまなオプションを含むことができます。このコールバックは、フロントエンドでブロックをレンダリングするために使用され、renderプロパティの代替としてblock.jsonで使用されます。

開発プロセス中、block.jsonファイルは通常、src(ソース)ディレクトリからbuildディレクトリに移動され、コードのコンパイルの一部として扱われます。したがって、ブロックを登録する際は、$block_typeパスがblock.jsonファイルをbuildディレクトリ内で指していることを確認してください。

  1. ``````bash
  2. register_block_type(
  3. __DIR__ . '/build',
  4. array(
  5. 'render_callback' => 'render_block_core_notice',
  6. )
  7. );
  8. `

こちらは、initフックを含むより完全な例です。

  1. function minimal_block_ca6eda___register_block() {
  2. register_block_type( __DIR__ . '/build' );
  3. }
  4. add_action( 'init', 'minimal_block_ca6eda___register_block' );

上記の完全なブロックの例を参照してください

JavaScriptによるブロックの登録(クライアントサイド)

ブロックがすでにサーバーで登録されている場合、registerBlockTypeメソッドを使用してJavaScriptでクライアントサイドの設定を登録するだけで済みます。ブロックのblock.jsonファイルで定義されたのと同じブロック名を使用することを確認してください。以下は例です:

  1. import { registerBlockType } from '@wordpress/blocks';
  2. registerBlockType( 'my-plugin/notice', {
  3. edit: Edit,
  4. // ...other client-side settings
  5. } );

一般的には、「メタデータファイルを使用する利点」セクションで説明されている利点のために、PHPを使用してサーバー上でブロックを登録することが推奨されますが、クライアントサイドのみでブロックを登録することも選択できます。registerBlockTypeメソッドを使用すると、メタデータを使用してブロックタイプを登録できます。

この関数は2つのパラメータを受け取ります:

  • blockNameOrMetadata (string|Object): これは、ブロックタイプの名前を文字列として指定するか、通常block.jsonファイルから読み込まれるブロックのメタデータを含むオブジェクトです。
  • settings (Object): これは、ブロックのクライアントサイドの設定を含むオブジェクトです。

ビルドプロセスを使用している場合、block.jsonファイル(または他の.jsonファイル)の内容をJavaScriptファイルに直接インポートできます。これは、wp-scriptsが提供するものです。

  1. - **`````edit`````:** エディターでブロックに使用されるReactコンポーネント。
  2. - **`````save`````:** データベースに保存される静的HTMLマークアップを返す関数です。
  3. `````registerBlockType()`````関数は、成功時に登録されたブロックタイプ(`````WPBlock`````)を返し、失敗時には`````undefined`````を返します。以下は例です:
  4. ``````bash
  5. import { registerBlockType } from '@wordpress/blocks';
  6. import { useBlockProps } from '@wordpress/block-editor';
  7. import metadata from './block.json';
  8. const Edit = () => <p { ...useBlockProps() }>Hello World - Block Editor</p>;
  9. const save = () => <p { ...useBlockProps.save() }>Hello World - Frontend</p>;
  10. registerBlockType( metadata.name, {
  11. edit: Edit,
  12. save,
  13. } );
  14. `

上記の完全なブロックの例を参照してください

追加リソース