has_post_thumbnail()

has_post_thumbnail()
目次

has_post_thumbnail()とは?

has_post_thumbnail() は、WordPressにおける投稿・ページに「アイキャッチ画像(サムネイル)」が設定されているかどうかを判定するための関数です。テーマ開発やカスタマイズの場面で、画像の有無に応じて処理を切り替えたいときによく使われます。

has_post_thumbnail()の基本構文

has_post_thumbnail( int|WP_Post|null $post = null ): bool

has_post_thumbnail()の引数

引数説明
$postチェックしたい投稿のIDまたはWP_Postオブジェクト。省略時は現在の投稿。

has_post_thumbnail()の戻り値

説明
boolアイキャッチ画像が設定されていれば true、なければ false

has_post_thumbnail()の使用例

1. 単純な条件分岐

if ( has_post_thumbnail() ) {
    the_post_thumbnail('medium');
} else {
    echo '<img src="/path/to/default.jpg" alt="No image">';
}

現在の投稿にアイキャッチ画像が設定されていればその画像を表示し、設定されていなければデフォルト画像を表示します。

2. 投稿IDを指定してチェック

$post_id = 123;
if ( has_post_thumbnail( $post_id ) ) {
    echo 'この投稿にはアイキャッチがあります。';
}

任意の投稿に対してアイキャッチ画像があるかどうかを調べたいときに便利です。

has_post_thumbnail()のよくある用途

投稿一覧でのサムネイル表示

<?php if ( have_posts() ) : ?>
    <ul>
    <?php while ( have_posts() ) : the_post(); ?>
        <li>
            <?php if ( has_post_thumbnail() ) : ?>
                <a href="<?php the_permalink(); ?>">
                    <?php the_post_thumbnail('thumbnail'); ?>
                </a>
            <?php endif; ?>
            <h2><?php the_title(); ?></h2>
        </li>
    <?php endwhile; ?>
    </ul>
<?php endif; ?>

このように、一覧表示でアイキャッチ画像の有無に応じてレイアウトを変える処理に使用されます。

has_post_thumbnail()の注意点

1. サムネイル機能の有効化が必要

has_post_thumbnail() を使う前に、テーマでアイキャッチ機能を有効にしておく必要があります。functions.php に以下の記述があることを確認しましょう。

add_theme_support('post-thumbnails');

これがないと、アイキャッチ画像を設定しても has_post_thumbnail() は常に false を返してしまいます。

2. the_post() との併用

ループ内で使用する場合、the_post() を通した後でないと正しく動作しないことがあります。これは、グローバル $post オブジェクトが正しくセットされていないと has_post_thumbnail() が参照する投稿が不明になるためです。

関連関数との違い

関数名説明
has_post_thumbnail()アイキャッチ画像の有無を true/false で返す
the_post_thumbnail()アイキャッチ画像の <img> タグを出力する
get_the_post_thumbnail()アイキャッチ画像の <img> タグを文字列として取得(出力はしない)
set_post_thumbnail()投稿にアイキャッチ画像を設定(管理画面外から操作する際に使用)
delete_post_thumbnail()投稿のアイキャッチ画像を削除

has_post_thumbnail()の応用テクニック

1. 固定ページで条件分岐

if ( is_page('company') && has_post_thumbnail() ) {
    the_post_thumbnail('large');
}

特定の固定ページだけアイキャッチを出したい場合の活用例です。

2. カスタム投稿タイプに対応させる

$args = [
    'post_type' => 'portfolio',
    'posts_per_page' => 10
];
$query = new WP_Query($args);

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        if ( has_post_thumbnail() ) {
            the_post_thumbnail('medium');
        }
    }
    wp_reset_postdata();
}

よくあるミスと対処法

ミス内容原因解決策
has_post_thumbnail() が常に false を返すadd_theme_support('post-thumbnails') が未定義functions.php に追加する
一覧ページで画像が表示されないループ外で呼び出しているthe_post() の後に使用する
画像のサイズがおかしいサムネイルサイズを指定していない、もしくは未登録add_image_size() でサイズを登録してから使用する

has_post_thumbnail()のまとめ

  • has_post_thumbnail() は、投稿にアイキャッチがあるかどうかを判定する関数。
  • 画像の有無に応じた表示制御やレイアウト調整に便利。
  • 使用前には add_theme_support('post-thumbnails') を忘れずに。
  • 他の画像関数(the_post_thumbnail() など)と組み合わせて使うことで、より柔軟な出力が可能。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次