has_block()


WordPress関数has_block()は、投稿やページの内容に特定のブロックが含まれているかどうかを確認するために使用されます。

構文

has_block( string $block_name, WP_Post|string|null $post = null );

引数の説明:

  • $block_name (string) — 検索するブロックの名前(例: 'core/paragraph')。
  • $post (WP_Post|string|null) — 投稿ID、投稿オブジェクト、または投稿内容(省略時は現在の投稿が使用されます)。

例 1: 段落ブロックの存在を確認する

投稿内容に段落ブロックが含まれているかどうかを確認します。

<?php
if ( has_block( 'core/paragraph' ) ) {
    echo '段落ブロックが存在します。';
}
?>

例 2: カスタム投稿タイプで特定のブロックを確認する

カスタム投稿タイプ「product」で「画像ブロック」の存在を確認します。

<?php
if ( has_block( 'core/image', get_post( get_the_ID() ) ) ) {
    echo '画像ブロックが含まれています。';
}
?>

例 3: カスタム関数を使用してブロックを条件付きで表示する

特定のブロックが存在する場合にコンテンツを表示します。

<?php
function display_block_content( $post_id ) {
    if ( has_block( 'core/gallery', $post_id ) ) {
        echo 'ギャラリーブロックが含まれています。';
    }
}
display_block_content( get_the_ID() );
?>

例 4: ショートコードを使用して確認

ショートコードで特定のブロックを確認します。

<?php
add_shortcode( 'check_block', function( $atts ) {
    $atts = shortcode_atts( array(
        'block' => 'core/paragraph',
    ), $atts );
    return has_block( $atts['block'] ) ? 'ブロックが見つかりました。' : 'ブロックが見つかりません。';
} );
?>

例 5: 投稿リストの中でブロックを確認

投稿リスト内で特定のブロックを持つ投稿のみをフィルタリングします。

<?php
$posts = get_posts( array( 'post_type' => 'post' ) );
foreach ( $posts as $post ) {
    if ( has_block( 'core/quote', $post ) ) {
        echo $post->post_title . 'には引用ブロックが含まれています。<br>';
    }
}
?>

注意事項

has_block()は、投稿内容を解析するため、非常に多くの投稿に対して使用する場合はパフォーマンスに注意してください。また、正確なブロック名を指定する必要があります。誤った名前を指定すると常にfalseを返します。


関連機能: