はじめに
ブロックプラグインの数が増えてくると、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 は次のようにします。
{
"scripts": {
"build": "wp-scripts build --blocks-manifest",
"start": "wp-scripts start --blocks-manifest"
}
}
次に、プラグインの登録コードを一括登録に置き換えます。
<?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
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/scripts30.14.0 からマニフェスト生成に関する不具合修正が入っています。- 6.8未満をサポートするならフォールバックを入れる
サイト要件に合わせてfunction_exists()ベースの分岐を残しておくと、アップデート移行が滑らかです。
まとめ
wp_register_block_types_from_metadata_collection() は、ブロック開発の運用を軽くしてくれる実務向けの関数です。登録配列の手管理を減らせるので、ブロック数が増えるほどメリットが出ます。
まずは新規プラグインで導入し、次に既存プラグインへ段階的に展開する流れがおすすめです。後方互換を入れておけば、移行リスクも抑えられます。
ポイント
- WordPress 6.8で複数ブロックの一括登録がより実装しやすくなった
--blocks-manifestをビルドに組み込むと運用が安定する- 6.8未満対応は
function_exists()で安全に分岐できる