
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()
など)と組み合わせて使うことで、より柔軟な出力が可能。