WordPressで投稿の最初の画像をアイキャッチにする方法

この記事は約5分で読めます。

WordPressでアイキャッチ画像がない場合は、投稿の最初の画像<外部イメージ>を確認し、Eyecatch データとして画像をダウンロードしてアイキャッチとして設定する。

トリガーは投稿保存時とする。

functions.phpに下記を追加すると、投稿を保存時に自動的に投稿の最初の画像を取得し設定してくれるようになる。

※OpenAiのChatgptに作ってもらったコードです。また、コードの動作確認済です。

// アイキャッチ画像が有効化されているかどうか確認
if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
}

// 投稿内の最初の画像を取得する関数
function catch_first_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  // デフォルトの画像を設定
  if(empty($first_img)){
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

// アイキャッチ画像がない場合に投稿内の最初の画像をダウンロードして設定する関数
function auto_post_thumbnail() {
    global $post;
    if (!has_post_thumbnail($post->ID)) { // アイキャッチ画像がない場合
        $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); // 投稿に添付された画像を取得
        if ($attached_image) { // 添付された画像がある場合
            foreach ($attached_image as $attachment_id => $attachment) {
                set_post_thumbnail($post->ID, $attachment_id); // 最初の添付画像をアイキャッチとして設定
            }
        } else { // 添付された画像がない場合
            $first_image = catch_first_image(); // 投稿内の最初の画像を取得
            if ($first_image) { // 最初の画像がある場合
                require_once(ABSPATH . 'wp-admin/includes/file.php'); // ファイル操作用の関数を読み込む
                require_once(ABSPATH . 'wp-admin/includes/media.php'); // メディア操作用の関数を読み込む
                require_once(ABSPATH . 'wp-admin/includes/image.php'); // イメージ操作用の関数を読み込む
                media_sideload_image($first_image, $post->ID); // 最初の画像をメディアライブラリに追加する
                set_post_thumbnail($post->ID, get_attachment_id_from_src($first_image)); // 追加した最初の画像をアイキャッチとして設定する
            }
        }
    }
}
add_action('save_post', 'auto_post_thumbnail'); // 投稿保存時に自動的に実行するようにフックする

// URLから添付ファイルIDを取得する関数
function get_attachment_id_from_src ($image_src) {
    global $wpdb;
    return (int)$wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'");
}

このコードでは、以下のことが行われます:

アイキャッチ画像がすでに設定されている場合は何もしない。
投稿内容から最初のimgタグ(HTMLタグで画像を表示するためのもの)を探す。

  • imgタグからsrc属性(画像のURLを指定するためのもの)を取得する。
  • src属性から画像URLが外部イメージ(自分のサイト以外にある画像)であるかどうか判定する。
  • 外部イメージであれば、サーバーにダウンロードしてメディアライブラリ(WordPressで管理される画像やファイルの集合)に登録する。
  • 外部イメージでなければ、メディアライブラリから画像に対応する添付ID(WordPressで管理される画像やファイルの識別番号)を取得する。
  • 添付IDが取得できたら、アイキャッチ画像として設定する。

以上がコードの詳細や解説です。このコードをfunctions.php(WordPressのテーマファイルの一つで、テーマ全体に影響する機能や設定を記述するファイル)に追加すると、投稿を保存時に自動的に投稿の最初の画像をアイキャッチとして設定してくれるようになります。

この方法は、以下のようなメリットがあります:

  • アイキャッチ画像がない場合でも、投稿内容に合った画像が表示されることで、読者への印象や興味を高めることができます。
  • アイキャッチ画像を手動で設定する手間や時間を省くことができます。
  • 外部イメージでもアイキャッチとして使えるようになります。

ただし、以下のような注意点もあります:

  • 外部イメージは著作権や使用許可などに注意しなければなりません。無断でダウンロードしたり使用したりすると法的な問題が発生する可能性があります。
タイトルとURLをコピーしました