【WordPress】記事の最初の画像を自動でアイキャッチに設定する方法

【WordPress】記事の最初の画像を自動でアイキャッチに設定する方法 WordPress

WordPressではアイキャッチ画像を設定することで、記事一覧やSNSでの表示を魅力的にできます。ただし、手動で設定するのが面倒だったり、過去の記事にアイキャッチがないという悩みもあるでしょう。

この記事では、投稿本文中の最初の画像を自動でアイキャッチに設定する方法を紹介します。

自動で最初の画像をアイキャッチに設定するコード

以下のコードを functions.php に追記します。

function auto_set_post_thumbnail_from_first_image($post_id) {
  // 自動保存・リビジョン・ゴミ箱は除外
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
  if (wp_is_post_revision($post_id) || get_post_status($post_id) === 'trash') return;

  // 対象の投稿タイプ(必要に応じて追加)
  $allowed_post_types = array('post', 'your_custom_post_type'); // ←カスタム投稿タイプをここに追加

  if (!in_array(get_post_type($post_id), $allowed_post_types)) return;

  // すでにアイキャッチがある場合はスキップ
  if (has_post_thumbnail($post_id)) return;

  // 本文から最初の画像URLを抽出
  $post = get_post($post_id);
  if (!$post) return;
  $content = $post->post_content;

  if (preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches)) {
    $image_url = $matches[1];
    $attachment_id = attachment_url_to_postid($image_url);

    if ($attachment_id) {
      set_post_thumbnail($post_id, $attachment_id);
      return;
    }
  }

  // 最初の画像が見つからなかった場合のデフォルト画像処理
  $default_image_id = 123; // メディアに登録された画像のIDに置き換えてください
  if ($default_image_id) {
    set_post_thumbnail($post_id, $default_image_id);
  }
}
add_action('save_post', 'auto_set_post_thumbnail_from_first_image');

デフォルト画像を設定するには?

set_post_thumbnail() に渡すIDは、WordPressにアップロードされた画像の 添付ファイルID です。

IDの確認方法
1.管理画面 → メディア → 画像を選択
2.ブラウザのアドレスバーに表示される post=数字 がその画像のIDです。

過去の記事に一括で適用する方法

この処理は「投稿の保存時」に実行されるため、すでに公開済みの投稿には反映されません。以下のようなスクリプトを一時的に管理画面用ファイルなどに追加して、一括で再実行することができます。

// 管理画面などに一時的に記載して実行し、後で削除してください
function apply_thumbnail_to_existing_posts() {
  $args = array(
    'post_type' => array('post', 'your_custom_post_type'),
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_query' => array(
      array(
        'key' => '_thumbnail_id',
        'compare' => 'NOT EXISTS',
      )
    )
  );
  $query = new WP_Query($args);

  foreach ($query->posts as $post) {
    auto_set_post_thumbnail_from_first_image($post->ID);
  }

  echo '処理が完了しました。対象投稿数:' . count($query->posts);
}
// apply_thumbnail_to_existing_posts(); // ← 必要なときだけ有効化

⚠ 実行後はセキュリティやパフォーマンスの観点から、必ずこの関数の呼び出しをコメントアウトまたは削除してください。

まとめ

記事本文の最初の画像を自動でアイキャッチに設定することで、投稿のビジュアル品質を保ちながら作業効率もアップします。とくに投稿数が多いサイトでは、この仕組みを導入することで更新の手間を大きく削減できます。ぜひ活用してみてください。