WordPressのブロックエディター(Gutenberg)では、繰り返し使いたいコンテンツを「再利用ブロック」として登録しておくことができます。通常は編集画面から手動で作成・管理しますが、PHPで事前に再利用ブロックを登録しておきたいケースもあります。この記事では、再利用ブロックの登録・呼び出しをPHPで管理する方法を紹介します。
再利用ブロックの正体は「wp_block」投稿タイプ
再利用ブロックは内部的にはwp_blockというカスタム投稿タイプとして保存されています。つまり、wp_insert_post()を用いて通常の投稿と同様に扱うことが可能です。
PHPで再利用ブロックを登録する
以下のコードをfunctions.phpに追加すると、サイト初回読み込み時に指定した再利用ブロックが登録されます。
functions.php:再利用ブロックの登録
function register_custom_reusable_block() {
// 初回のみ実行し、以降はDBクエリ自体を発生させない
if (get_option('my_reusable_block_registered')) {
return;
}
$slug = 'my-reusable-block';
// すでに存在するか確認
$existing = get_posts(array(
'name' => $slug,
'post_type' => 'wp_block',
'post_status' => 'publish',
'numberposts' => 1,
));
if (empty($existing)) {
$block_content = '<!-- wp:paragraph --><p>これはPHPで追加した再利用ブロックです。</p><!-- /wp:paragraph -->';
$postarr = array(
'post_title' => 'PHPで追加した再利用ブロック',
'post_name' => $slug,
'post_content' => $block_content,
'post_status' => 'publish',
'post_type' => 'wp_block',
);
wp_insert_post($postarr);
}
update_option('my_reusable_block_registered', 1);
}
add_action('init', 'register_custom_reusable_block');
post_contentに記述されているのは、Gutenbergのブロック記法(コメント形式)です。この形式で記述すれば、ブロックとして認識されます。
initフックで毎回DBクエリを走らせない
if (empty($existing))のチェックは重複登録こそ防ぎますが、そのチェックに使うget_posts()自体は、単純にinitにフックしただけではサイトへのあらゆるアクセスのたびに毎回実行され続けてしまいます。ブロックが一度登録された後は完全に無駄なクエリになるため、上記コードのようにget_option()で「登録済みフラグ」を確認し、初回のみDBクエリを実行するようにしましょう。テンプレートやショートコードから呼び出す方法
PHP側から再利用ブロックの内容をテンプレートに表示したい場合、get_page_by_path()とthe_contentフィルターを使って以下のように記述できます。
再利用ブロックの取得と表示
$block_post = get_page_by_path('my-reusable-block', OBJECT, 'wp_block');
if ($block_post) {
echo apply_filters('the_content', $block_post->post_content);
}
もしくは、ショートコードとして登録することで、任意の場所に呼び出すことも可能です。
functions.php:ショートコードとして登録
function shortcode_reusable_block() {
$block_post = get_page_by_path('my-reusable-block', OBJECT, 'wp_block');
return $block_post ? apply_filters('the_content', $block_post->post_content) : '';
}
add_shortcode('reusable_block', 'shortcode_reusable_block');
あとは投稿やウィジェット内に[reusable_block]と記述するだけで表示されます。
よくある質問(FAQ)
Q再利用ブロックをPHPで登録・管理するには?
A再利用ブロックはWordPressのwp_blockカスタム投稿タイプとして保存されます。wp_insert_post()でpost_type=wp_blockとして追加できます。エディターで作成した再利用ブロックも同様のDBエントリーです。initフックで登録処理を行う場合は、get_option()等で初回のみ実行されるようガードしましょう。
Q再利用ブロックのコンテンツをPHPで取得・表示するには?
Aget_posts(array(‘post_type’ => ‘wp_block’, ‘name’ => ‘block-slug’))で再利用ブロックを取得し、do_blocks($post->post_content)でブロックをレンダリングして表示します。
Q再利用ブロックを複数のサイトで共有するには?
A再利用ブロックのエクスポート(管理画面の再利用ブロック一覧からJSON出力)とインポートで他サイトへ移行できます。マルチサイトの場合はデータベースレベルで同期する仕組みが必要です。
まとめ
WordPressの再利用ブロックは「wp_block」投稿タイプとして扱われるため、PHPからの操作が可能です。これにより、初期コンテンツの登録やテーマ・プラグインからの管理が柔軟に行えます。マルチサイトやカスタムテーマ開発の現場では、管理画面での手作業を減らす手段として非常に有効です。登録処理は初回のみ実行されるようガードし、毎リクエストの無駄なDBクエリを避けましょう。

