has_block() の使い方|説明・引数・注意点

説明

has_block() は、投稿に、指定したブロックが含まれているかを判定する関数です。

基本構文

has_block( string $block_name, int|string|WP_Post|null $post = null ): bool

引数

  • $block_name:ブロック名(例:core/gallery)
  • $post:投稿ID・本文・オブジェクト

戻り値

含まれていれば true。

使い方(サンプル)

if ( has_block( 'core/gallery' ) ) {
	wp_enqueue_script( 'my-gallery' );
}

注意点

  • ブロックが使われているページだけアセットを読み込む用途で使います。

実務での使いどころ

  • 投稿に、特定のブロックが含まれるときだけ、CSSやJavaScriptを、読み込むとき。

よくあるミスと対処

  • ブロック名を、名前空間なしで指定している。core/gallery のように、指定する。
  • $post が、未設定のときの確認がない。
  • 同期パターン(再利用ブロック)や、テンプレートの中のブロックまで、検出できると考えている。検出できない場合がある(通常のパターンは、挿入時に実際のブロックになるため、検出される)。

NG例

if ( has_block( 'gallery' ) ) { // 名前空間がない
	// ...
}

OK例

add_action( 'wp_enqueue_scripts', function () {
	if ( is_singular() && has_block( 'core/gallery' ) ) {
		wp_enqueue_script( 'my-gallery', get_theme_file_uri( '/js/gallery.js' ), array(), '1.0.0', true );
	}
} );

使い分け早見表

関数 役割
has_block() 本文に、ブロックが含まれるかを確認する
has_shortcode() 本文に、ショートコードが含まれるかを確認する
parse_blocks() 本文を、ブロックの配列に分解する

関連項目

parse_blocks()、render_block()

公式リファレンス:has_block() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました