WordPress 6.8で始める複数ブロック一括登録 wp_register_block_types_from_metadata_collection()

はじめに

ブロックプラグインの数が増えてくると、register_block_type() を並べる管理が地味に重くなります。新しいブロックを追加するたびに、PHP側の登録リストを更新する運用はミスも起きやすいです。

WordPress 6.8 では、この問題に効く wp_register_block_types_from_metadata_collection() が追加されました。blocks-manifest.php を使って複数ブロックを一括登録できるので、登録コードをかなりシンプルにできます。

この記事では、基本の導入から後方互換付きの実装までを実務向けにまとめます。

機能やライブラリの概要

wp_register_block_types_from_metadata_collection() は、ブロックメタデータのコレクションを使って、複数ブロックをまとめて登録する関数です。WordPress の関数リファレンスでは 6.8.0 で導入と明記されています。

ポイントは次の3つです。

  • register_block_type() の配列ループを減らせる
  • ブロック追加時にPHP側の登録追記が不要になりやすい
  • block.json 中心の構成に寄せやすい 6.7で入った wp_register_block_metadata_collection() の流れを、6.8でさらに実務向けにしたイメージです。

基本の使い方

まずは @wordpress/scripts のビルドで blocks-manifest.php を生成します。package.json の scripts は次のようにします。

JSON
{
  "scripts": {
    "build": "wp-scripts build --blocks-manifest",
    "start": "wp-scripts start --blocks-manifest"
  }
}

次に、プラグインの登録コードを一括登録に置き換えます。

PHP
<?php
/**
 * Plugin Name: Site Demo Blocks
 */

add_action( 'init', function () {
	wp_register_block_types_from_metadata_collection(
		__DIR__ . '/build',
		__DIR__ . '/build/blocks-manifest.php'
	);
} );

これだけで、マニフェスト内のブロックをまとめて登録できます。登録対象を配列で手管理しなくて済むのが大きな利点です。

便利な使いどころ

この関数が効くのは、次のようなケースです。

  • 1つのプラグインで複数ブロックを運用している
  • 開発チームでブロック追加が頻繁にある
  • PHP側の更新漏れを減らしたい
  • ブロックごとのディレクトリ分割を徹底している

特に「実装担当はJS中心、レビュー担当はPHP中心」のような分業では、登録コードが短いだけでレビュー負荷がかなり下がります。

応用コード

実務では、6.8未満の環境も考慮することが多いです。次のようにフォールバックを入れておくと安全です。

PHP
<?php
add_action( 'init', function () {
	$build_path = __DIR__ . '/build';
	$manifest_path = $build_path . '/blocks-manifest.php';

	if ( function_exists( 'wp_register_block_types_from_metadata_collection' ) ) {
		wp_register_block_types_from_metadata_collection( $build_path, $manifest_path );
		return;
	}

	if ( function_exists( 'wp_register_block_metadata_collection' ) ) {
		wp_register_block_metadata_collection( $build_path, $manifest_path );
	}

	$manifest_data = require $manifest_path;

	foreach ( array_keys( $manifest_data ) as $block_name ) {
		register_block_type( $build_path . "/{$block_name}" );
	}
} );

この構成なら、6.8では新関数を使い、6.7やそれ以前では既存フローにフォールバックできます。段階的に移行したいプロジェクトで扱いやすいです。

注意点

  • blocks-manifest.php が前提になる
    CIやローカル開発でマニフェスト生成が抜けると動作しません。ビルドコマンドをチームで固定しておくのが安全です。
  • @wordpress/scripts のバージョンを確認する
    2025-04-16 の更新で、@wordpress/scripts 30.14.0 からマニフェスト生成に関する不具合修正が入っています。
  • 6.8未満をサポートするならフォールバックを入れる
    サイト要件に合わせて function_exists() ベースの分岐を残しておくと、アップデート移行が滑らかです。

まとめ

wp_register_block_types_from_metadata_collection() は、ブロック開発の運用を軽くしてくれる実務向けの関数です。登録配列の手管理を減らせるので、ブロック数が増えるほどメリットが出ます。

まずは新規プラグインで導入し、次に既存プラグインへ段階的に展開する流れがおすすめです。後方互換を入れておけば、移行リスクも抑えられます。

ポイント

  • WordPress 6.8で複数ブロックの一括登録がより実装しやすくなった
  • --blocks-manifest をビルドに組み込むと運用が安定する
  • 6.8未満対応は function_exists() で安全に分岐できる

参考リンク

read next