WordPress 6.x 以降、テーマの patterns/
ディレクトリに PHP ファイルを追加すると、ブロックパターンとして自動的に読み込まれます。
しかし開発中に patterns/cta.php
などを編集しても、管理画面のパターン一覧にすぐ反映されず、反映が遅いという現象が起こります。
解決方法 1: Local のキャッシュをクリア
Local (by Flywheel) を使っている場合、キャッシュが効いている可能性があります。
wp cache flush
を実行。これで反映されることもありますが、毎回は面倒です。
解決方法 2: functions.php
から直接登録する
開発中におすすめなのは、WordPress の自動スキャンに頼らず 自分でパターンを登録する方法です。
file_get_contents() で patterns/*.php を直接読み込めば、保存した瞬間に反映されます。
実装例
function mytheme_block_patterns() {
// 独自カテゴリを追加
register_block_pattern_category(
'mytheme',
array( 'label' => 'My Theme' )
);
// デフォルトのコアパターンを削除(不要なら)
remove_theme_support('core-block-patterns');
// 登録するパターン一覧
$patterns = array(
'cta' => 'CTAセクション',
'gallery' => 'ギャラリー',
'frame' => '見出し付きの囲み枠',
'heading-decoration' => '飾り罫を付けた見出し',
'photos' => '並びをずらした組写真',
);
foreach ( $patterns as $slug => $title ) {
$file = get_template_directory() . '/patterns/' . $slug . '.php';
if ( file_exists( $file ) ) {
register_block_pattern(
'mytheme/' . $slug,
array(
'title' => __( $title, 'mytheme' ),
'categories' => array( 'mytheme' ),
'content' => file_get_contents( $file ),
)
);
}
}
}
add_action( 'init', 'mytheme_block_patterns' );
メリット
- パターンファイルを保存した瞬間に反映される
- 複数パターンをまとめて管理できる
- キャッシュを気にせず開発が進められる
まとめ
- WordPress の
patterns/
ディレクトリは便利だが、キャッシュのせいで反映が遅い - 開発中は
functions.php + file_get_contents()
で登録すれば即反映 - 本番配布用テーマでは、必要に応じて元の
patterns/
ディレクトリ方式に戻すのもアリ
参考URL
WordPress の Block Patterns 全体の仕様(register_block_pattern
等)
Patterns – Block Editor Handbook
テーマで /patterns
ディレクトリを使ってパターンを登録する方法
Registering Patterns – Theme Handbook
register_block_pattern() を使って PHP ファイルから内容を読み込む例
StackOverflow の例
「パターンキャッシュ」に関するバグレポート(キャッシュが絶対パスを保持する問題など)
WooCommerce の GitHub Issue #53345