WordPressで記事本文の最初の画像をサムネイルとして取得する方法
WordPressでは、記事本文に設定されている最初の画像を取得し、記事一覧などのサムネイルとして表示できます。
この記事では、functions.php に関数を追加し、記事本文から最初の画像IDを取得して、指定したサイズの画像URLを取得する方法を紹介します。
記事内の最初の画像を取得するコード
functions.phpにコードを追加
まず、テーマの functions.php に以下のコードを追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/****************************/ /** 記事の最初の画像を取得して表示 **/ /****************************/ function catch_that_image($size = 'medium') { global $post; $default_url = get_stylesheet_directory_uri() . '/images/default.jpg'; preg_match( '/wp-image-(\d+)/i', $post->post_content, $matches ); if (!empty($matches[1])) { $img_id = (int) $matches[1]; $image_array = image_downsize($img_id, $size); if (!empty($image_array[0])) { return $image_array[0]; } } return $default_url; } |
この関数では、記事本文に含まれる最初の wp-image-画像ID を取得し、その画像のURLを返します。
記事本文に画像がない場合や、画像URLを取得できない場合は、default.jpg のURLを返します。
default.jpg は、テーマ内の imagesフォルダなどにあらかじめ用意しておきます。
取得した画像を表示する
サムネイルサイズで取得する
WordPressの「サムネイル」サイズで画像を取得する場合は、以下のように記述します。
<img src="<?php echo catch_that_image('thumbnail'); ?>" alt="<?php the_title(); ?>" />
catch_that_image() の引数に thumbnail を指定すると、サムネイルサイズの画像URLを取得できます。
記事一覧など、比較的小さな画像を表示する場合に利用できます。
サイズを指定しない
画像サイズを指定せずに関数を呼び出すこともできます。
<img src="<?php echo catch_that_image(); ?>" alt="<?php the_title(); ?>" />
この場合は、関数の初期値である medium が使用されます。
function catch_that_image($size = 'medium')
そのため、サイズを指定しない場合は medium サイズの画像URLが返されます。
コードのポイント
記事本文から画像IDを取得する
以下の部分では、記事本文に含まれる wp-image-画像ID を正規表現で検索しています。
preg_match(
'/wp-image-(\d+)/i',
$post->post_content,
$matches
);
例えば、記事本文の画像に以下のようなクラスが設定されている場合、
<img class="wp-image-123" src="..." alt="">
123 の部分が画像IDとして取得されます。
取得した画像IDは、以下の処理で整数に変換しています。
$img_id = (int) $matches[1];
指定したサイズの画像URLを取得する
取得した画像IDを image_downsize() に渡すことで、指定したサイズの画像情報を取得できます。
$image_array = image_downsize($img_id, $size);
例えば、
catch_that_image('thumbnail');
とした場合は、thumbnail サイズの画像が対象になります。
image_downsize() の戻り値に含まれる画像URLは $image_array[0] に格納されるため、以下のように返します。
return $image_array[0];
画像がない場合はデフォルト画像を表示する
記事本文に画像がない場合などは、あらかじめ用意したデフォルト画像を返します。
return $default_url;
デフォルト画像のURLは、以下の部分で指定しています。
$default_url = get_stylesheet_directory_uri() . '/images/default.jpg';
そのため、テーマ内に以下のような構成で default.jpg を用意しておきます。
テーマ
└─ images
└─ default.jpg
記事本文に画像がない場合でも、サムネイル部分を空白にせず、指定したデフォルト画像を表示できます。
まとめ
WordPressでは、記事本文に含まれる最初の画像IDを取得し、指定したサイズの画像URLをサムネイルとして利用できます。
functions.php に関数を追加しておけば、記事一覧などでアイキャッチ画像が設定されていない場合にも、本文内の画像をサムネイルとして表示できます。