WEB制作のための情報サイト / unazuki Library

has_post_thumbnail()

基本構文と使い方(引数・実行結果)

基本構文

投稿にアイキャッチ画像があるかないかを判定した結果、真偽値(true / false)を返します。

has_post_thumbnail($post);

引数

このテンプレートタグは実行時に引数を1つ渡すことができます。

引数必須/任意引数に指定する内容
第1引数
$post
任意判定したい投稿のID (整数) / オブジェクト
初期値現在の投稿オブジェクト

実行結果

戻り値(返す値):真偽値(true / false)

例1.引数なし:現在の投稿のサムネイル有無の判定結果(真偽値)を取得

下記例では、現在の投稿にサムネイルがあるかどうかを判定して、真偽値(true / false)を返します。
※引数に指定がないため、引数は初期値の「現在の投稿オブジェクト」になります。

has_post_thumbnail();

例2.引数あり:特定の投稿のサムネイル有無の判定結果(真偽値)を取得

下記例では、IDが30の投稿にサムネイルがあるかどうかを判定して、真偽値(true / false)を返します。

has_post_thumbnail(30);

学習者向け補足情報

【引数とは】
テンプレートタグ(=関数)を実行する際に、引数を渡すことができるテンプレートタグがあります。引数は、関数の中で使われるので、渡す引数の値によって実行結果が変わってきます。何を処理したいのか、どのようなデータを取得したいのかによって渡す引数が変わります。

【引数について】

  • 指定できる引数の数はテンプレートタグによって異なります。(引数なしもあり)
  • 引数ごとに必須 / 任意が決まっています。(必須は必ず指定、任意は指定しなければ初期値)
  • 引数名(例:$post)は仕様の便宜上の名前と考えてください。(この名前自体はテンプレートタグ実行に関係しません。各引数に何を指定するのかを理解していればOKです。)

【オブジェクトとは?】
オブジェクトとはデータの集合体です。例えば1つの記事には、記事の公開日、タイトル、本文など様々なデータがあります。それらを1つのデータにまとめたものがオブジェクトです。WordPressに関わらず、オブジェクトはプログラミングで一般的に使われるデータの集合体を示す言葉です。

【現在の投稿/記事オブジェクトとは?】
現在処理対象となっている投稿/記事オブジェクト(各投稿や各固定ページのオブジェクト)のことを指します。WordPressはリクエストされたページを表示するために、必要なデータをデータベースから取得した後、該当するデータを処理対象としてセットします。その現在セットされている投稿/記事オブジェクトのことを指しますが、詳しい理解には、「WordPressのループ」(+メインクエリ、サブクエリ)を理解する必要があります。

【戻り値とは?】
テンプレートタグ(=関数)を実行した結果、返ってくる値のことを戻り値といいます。戻り値を変数に格納してその後の処理に使ったりします。また、テンプレートタグによって、真偽値、オブジェクト、整数など、戻り値の型は様々です。
※戻り値はechoしない限り画面には表示されません。あくまでもプログラミング上で値として返ってくるだけです。戻り値ではなく、値を画面に表示するテンプレートタグもあります。(例:the_title は画面に記事のタイトルを表示するテンプレートタグ)

よくある使い方

投稿の一覧表示で、サムネイルがあるかどうかを判定する際などによく使われます。戻り値が真偽値ですので、if分を使ってサムネイルの有無で条件分岐をすることができます。

下記例ではサムネイル画像が設定されていなければデフォルトのnoimage.jpg(テーマ直下のimgディレクトリにあるnoimage.jpg)を読み込みます。

<?php if (has_post_thumbnail()) : ?>
	<?php the_post_thumbnail(); ?>
<?php else: ?>
	<img src="<?php echo esc_url(get_theme_file_uri('/img/noimage.jpg')); ?>" alt="">
<?php endif; ?>

参考コード

home.phpやarchive.phpに下記のようにコードを書いて、サムネイル付き投稿の一覧を表示することができます。

<?php if (have_posts()) : ?>
	<ul class="cards">
		<?php while (have_posts()): ?>
			<?php the_post(); ?>
			<li class="cards__item card">
				<a class="card__link" href="<?php the_permalink(); ?>">
					<div class="card__data">
						<div class="card__img">
							<?php if (has_post_thumbnail()) : ?>
								<?php the_post_thumbnail(); ?>
							<?php else: ?>
								<img src="<?php echo esc_url(get_theme_file_uri('/img/noimage.jpg')); ?>" alt="">
							<?php endif; ?>
						</div>
						<div class="card__date"><?php echo get_the_date('') ?></div>
						<div class="card__title"><?php the_title(); ?></div>
					</div>
				</a>
			</li>
		<?php endwhile; ?>
	</ul>
<?php endif; ?>

※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。

関連するテンプレートタグ

テンプレートタグ 説明
post_class() 投稿に関するclass名を表示する。
the_author() 現在の記事の投稿者の名前を表示します。
get_the_author() 現在の記事の投稿者の名前を返します。
the_ID() 現在の記事のIDを表示します。
get_the_ID() 現在の記事のIDを取得します。
get_post_meta() カスタムフィールドの値を取得します。
the_permalink() 記事のパーマリンク(URL)を表示します。
get_permalink() 記事のパーマリンク(URL)を表示します。
the_post_thumbnail() 記事にアイキャッチ画像がある場合は、アイキャッチ画像を表示する。
get_the_post_thumbnail() 記事にアイキャッチ画像がある場合は、アイキャッチ画像を含むimg要素を返す。
the_content() 記事本文を表示します。moreタグ(続きを読むタグ)を使っている場合は、引数の指定次第で記事の一部を表示します。
get_the_content() 記事本文のHTMLを取得します。moreタグ(続きを読むタグ)を使っている場合は、引数の指定次第で記事の一部を取得します。
the_excerpt() 記事の抜粋分を表示します。抜粋の長さはデフォルトで110文字(日本語)。
get_the_excerpt() 記事の抜粋分を取得します。抜粋の長さはデフォルトで110文字(日本語)。
the_time() 記事の公開時刻を表示します。
get_the_time() 記事の公開時刻を取得します。
the_date() 現在の記事(投稿や固定ページ)の公開日を表示します。
get_the_date() 記事(投稿や固定ページ)の公開日を取得する。
the_title() 記事のタイトルを表示します。
get_the_title() 記事のタイトルを取得します。