投稿にアイキャッチ画像があるかないかを判定した結果、真偽値(true / false)を返します。
has_post_thumbnail($post);このテンプレートタグは実行時に引数を1つ渡すことができます。
| 引数 | 必須/任意 | 引数に指定する内容 |
|---|---|---|
第1引数$post | 任意 | 判定したい投稿のID (整数) / オブジェクト初期値: 現在の投稿オブジェクト |
戻り値(返す値):真偽値(true / false)
下記例では、現在の投稿にサムネイルがあるかどうかを判定して、真偽値(true / false)を返します。
※引数に指定がないため、引数は初期値の「現在の投稿オブジェクト」になります。
has_post_thumbnail();下記例では、IDが30の投稿にサムネイルがあるかどうかを判定して、真偽値(true / false)を返します。
has_post_thumbnail(30);【引数とは】
テンプレートタグ(=関数)を実行する際に、引数を渡すことができるテンプレートタグがあります。引数は、関数の中で使われるので、渡す引数の値によって実行結果が変わってきます。何を処理したいのか、どのようなデータを取得したいのかによって渡す引数が変わります。
【引数について】
【オブジェクトとは?】
オブジェクトとはデータの集合体です。例えば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; ?>※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。