wp_attachment_is_image()

wp_attachment_is_image()
目次

wp_attachment_is_image()とは?

wp_attachment_is_image() は、WordPressにおける**添付ファイル(attachment)**が「画像ファイル」であるかどうかを判定するための関数です。主にテーマやプラグインで、投稿に添付されたファイルが画像かどうかで処理を分けたいときに使われます。

wp_attachment_is_image()の基本構文

wp_attachment_is_image( int $post_id )

wp_attachment_is_image()のパラメータ

  • $post_id(int):判定対象となる添付ファイルの投稿ID(=attachment ID

wp_attachment_is_image()の戻り値

  • true:その添付ファイルが画像である場合
  • false:画像ではない場合(例:PDF、動画、音声など)

wp_attachment_is_image()の使用例(基本的な使い方)

$attachment_id = get_post_thumbnail_id(); // アイキャッチ画像のIDを取得

if ( wp_attachment_is_image( $attachment_id ) ) {
    echo 'この添付ファイルは画像です';
} else {
    echo 'この添付ファイルは画像ではありません';
}

添付ファイルとは?

WordPressでは、投稿や固定ページにメディア(画像・PDF・音声・動画など)をアップロードすると、それぞれに「添付ファイル(attachment post type)」としてのエントリーが作成されます。

これにより、ファイルのメタデータ管理やテンプレート処理が柔軟に行えるようになっています。

wp_attachment_is_image()の判定の仕組み

内部的には、以下のような流れで「画像かどうか」を判定しています:

function wp_attachment_is_image( $post_id ) {
    $post = get_post( $post_id );
    if ( ! $post ) {
        return false;
    }

    return 0 === strpos( get_post_mime_type( $post ), 'image/' );
}

解説

  • get_post():投稿IDから投稿オブジェクトを取得
  • get_post_mime_type():その添付ファイルの MIMEタイプを取得(例:image/jpeg
  • strpos(..., 'image/') === 0:MIMEタイプの先頭が "image/" なら true(つまり画像)

→ MIMEタイプが image/jpeg, image/png, image/gif, image/webp, image/svg+xml などのときに true になります。

wp_attachment_is_image()の応用的な使い方

1. ギャラリー表示のフィルタリングに利用

$args = [
    'post_type'      => 'attachment',
    'posts_per_page' => -1,
    'post_status'    => 'inherit',
    'post_parent'    => get_the_ID(),
];

$attachments = get_posts( $args );

foreach ( $attachments as $attachment ) {
    if ( wp_attachment_is_image( $attachment->ID ) ) {
        echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
    }
}

→ 投稿に添付された「画像ファイル」だけを一覧表示

2. PDF・画像などの種別で処理を分ける

$attachment_id = 123;

if ( wp_attachment_is_image( $attachment_id ) ) {
    echo '画像として表示します';
} else {
    $mime = get_post_mime_type( $attachment_id );
    if ( $mime === 'application/pdf' ) {
        echo 'PDFファイルです';
    } else {
        echo 'その他のファイル形式です';
    }
}

wp_attachment_is_image()の類似・関連する関数との比較

関数名用途補足
wp_attachment_is_image()添付ファイルが画像か判定MIMEタイプが image/ かどうか
get_post_mime_type()添付ファイルの MIMEタイプ取得画像以外の詳細判定にも使える
wp_get_attachment_image()画像添付ファイルの HTML 出力サムネイルやサイズ指定が可能
wp_get_attachment_metadata()メディアのメタデータ取得幅・高さなども取得可能

wp_attachment_is_image()のよくある使用シーン

シーン内容
メディア一覧で画像のみ表示添付ファイルのループで画像だけを抽出
カスタムテンプレートで画像の有無をチェック画像がなければ代替処理を行う
投稿に添付されたファイルの種類で処理分岐PDF や画像を別のレイアウトで表示
メディアアップロード時のバリデーション(プラグイン内)特定の MIMEタイプのみ許可したいケース

wp_attachment_is_image()の注意点と補足

  • 投稿IDが必要:この関数は**添付ファイルの投稿ID(attachment ID)**を前提として動作します。ファイルURLやパスでは判定できません。
  • サニタイズは別途必要:ファイルの種類が判定できても、出力に関しては esc_url()esc_attr() などの適切なエスケープが必要です。
  • SVGは注意が必要:SVG は MIME タイプとして image/svg+xml が使われますが、WordPressの標準設定ではアップロード不可なため、別途 upload_mimes フィルターなどが必要です。

wp_attachment_is_image()のまとめ

項目内容
関数名wp_attachment_is_image()
主な用途添付ファイルが画像かどうかの判定
引数添付ファイルの投稿ID(int)
戻り値true(画像) / false(それ以外)
判定方法MIMEタイプが image/ で始まるかどうか
主な活用シーンギャラリー表示、画像専用テンプレートの条件分岐など
関連関数get_post_mime_type(), wp_get_attachment_image(), wp_get_attachment_metadata()

さらに実践的なTips

アイキャッチが画像以外の場合のエラー回避例:

$thumb_id = get_post_thumbnail_id();

if ( $thumb_id && wp_attachment_is_image( $thumb_id ) ) {
    echo get_the_post_thumbnail( get_the_ID(), 'medium' );
} else {
    echo '<img src="/noimage.png" alt="代替画像">';
}

wp_attachment_is_image() は、シンプルながらも非常に実用的な関数です。画像専用レイアウトや動的なギャラリー生成など、カスタマイズの幅が広がる場面で欠かせない存在です。画像に関連する処理を効率化するために、ぜひ覚えておきたい基本関数のひとつです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次