WordPressの投稿記事内の最初の画像をアイキャッチ画像代わりにする

以下の様なことがやりたかったのですが、先人の知恵通りだと上手くいかなかったので書き記しておきます。

やりたいこと

  1. アイキャッチ画像がある場合、アイキャッチ画像を表示する
  2. アイキャッチ画像がなく、記事内に画像がある場合、投稿記事内の最初の画像をアイキャッチ画像として表示する
  3. アイキャッチ画像がなく、記事内にも画像がない場合、予め用意しておいたサンプル画像を表示する

実際のコード

functions.php

// 投稿記事内の最初の画像をアイキャッチ画像代わりにする
function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  if($output) {
    $first_img = $matches [1] [0];
  } else {
    $first_img = get_template_directory_uri().'/assets/img/common/noimage.jpg';
  }
  return $first_img;
}
あお
あお

‘/assets/img/common/noimage.jpg’の中身はご自身で設定したい画像のパスに変更してくださいね!

表示させたいphpファイルに記述

<?php if (has_post_thumbnail()): ?>
  <?php the_post_thumbnail('thumbnail'); ?>
<?php else: ?>
  <img src="<?php echo catch_that_image(); ?>" alt="">
<?php endif; ?>

参考になれば嬉しいです!