同期パターン(旧称・再利用ブロック)を、ショートコードで呼び出す例です。ブロックエディターでは標準の同期パターン挿入を使えます。ここではクラシックエディターなど、ショートコードが必要な場所を対象にします。
公開済みのwp_blockだけを参照する
旧motoki_reuse_block_shortcodeとadd_shortcodeを外し、子テーマのfunctions.phpのPHP領域へ次を追加します。未指定ID、存在しないID、通常記事のID、非公開・パスワード付きのブロックは表示しません。先頭の<?phpは既にある場合は重ねません。
<?php
function waza_reuse_block($atts) {
static $active = [];
$a = shortcode_atts(['id'=>0], $atts, 'reuse-block');
$id = absint($a['id']);
if (!$id || isset($active[$id]) || count($active) >= 8) return '';
$block = get_post($id);
if (!$block || $block->post_type !== 'wp_block' || $block->post_status !== 'publish' || $block->post_password !== '') return '';
$active[$id] = true;
try {
return apply_filters('the_content', $block->post_content);
} finally {
unset($active[$id]);
}
}
add_shortcode('reuse-block', 'waza_reuse_block');
呼び出し方
[reuse-block id="123"]123を対象パターンの編集画面URLにあるpostのIDへ置き換えます。この例では、公開済みwp_blockとして保存された内容を表示します。管理メニューを増やすコードは不要です。現在の呼び名と管理方法はWordPress公式の同期パターンの説明を参照してください。
循環参照を作らない
同じパターンが自分自身を呼び出す場合は空文字を返します。AからB、BからAという参照も、呼び出し中のIDを記録して止めます。異なるIDを深く入れ子にする場合も8階層までです。内容のHTMLはthe_contentフィルターで処理し、埋め込み先の記事文脈は変更しません。
同じパターンを複数ページへ使うときの確認
対象パターンへ確認用の一文を加えて更新し、呼び出している各ページを新しく読み込みます。
IDを変えずに共通本文が更新され、以前の一文が残っていないことを確認します。
WordPress 7.1.2とSWELL 2.19.0の実HTTP表示で、同じ公開wp_blockを参照する2ページへの更新反映を確認しました。
IDなし・下書き・パスワード付きの参照は本文を出さず、自己参照とAからB・BからAの相互参照は循環部分で止まりました。
パターン内のリンクをEnterで開く操作も確認しています。
9階層の参照では8階層までを表示し、9階層目の本文を出さずに停止することを実HTTPで確認しました。
すべての動的ブロックや他プラグインとの併用を検証したものではないため、複雑なパターンでは実際の挿入先で確認してください。
確認と解除
通常表示、IDなし、削除済みID、下書き、パスワード付き、自己参照で確認してください。複雑な動的ブロックや他プラグインのフィルターを含む場合は、公開画面でも確認が必要です。非公開内容を訪問者へ表示するためのコードではありません。
PC・スマホでパターン内の画像幅、見出し、リンクのTab・Enter操作を確認します。取り消す場合は本文の呼び出しを外してから関数と登録処理を外します。パターン本体は削除しません。旧GitHubサンプルとは同期していません。



