現在の接続環境は
です

記事内にプロモーションが含まれています。

プロモーションを含みます

プラグイン使わずにアイキャッチ画像自動生成コード

WordPress カスタマイズ 伝えたいこと 備忘録

所要時間目安:8

This session is using  IPv4  is established in

今日は2025年5月8日です。

目次に行く・戻る

2025年5月8日 (木曜日)↓における週間月間人気記事トップ3は?↓

  • 本日
  • 週間
  • 月間
  1. キーレスリモコン破損

    車のキーナンバー確認方法。キーレス紛失や壊れた時 2PV

    初めての経験でした。(汗)…。 キーレスエントリー、キーレスリモコンがついた鍵がエンジンを回す時にボキッと折れてしまいました。(汗)…。 プラスチックの本体部分と鉄のキー部分が分裂してしまいました。 …

    もっと読む

  2. プッシュスイッチの自動戻りスイッチタクティカルスイッチ化初め

    プッシュスイッチを自動戻り(タクティカルスイッチ化)スイッチ加工方法 1PV

    車のカスタマイズ(その他の電化製品などのDIY)には欠かせないスイッチです。スイッチにもいくつかの種類があります。その中でエーモンのプッシュスイッチを自動戻りスイッチに加工する方法です。最近発売されて…

    もっと読む

  3. 仮歯が外れてしまった

    仮歯が取れた!!そんな時どうしたら良いのか2つの方法 1PV

    多くの方々はこれまでの人生において歯医者さんに行ったことがない人というのはほとんどいないと思います。 なぜなら、小学生の時などには必ず歯科検診もあるからです。この歯科検診を含めれば、 すべての人が歯科…

    もっと読む

  1. キーレスリモコン破損

    車のキーナンバー確認方法。キーレス紛失や壊れた時 29PV

    初めての経験でした。(汗)…。 キーレスエントリー、キーレスリモコンがついた鍵がエンジンを回す時にボキッと折れてしまいました。(汗)…。 プラスチックの本体部分と鉄のキー部分が分裂してしまいました。 …

    もっと読む

  2. エクストレイルT32運転席側バイザーメッキモール剥がれ修復方法とオススメ両面テープ 26PV

    車の購入後、乗ろうが乗らまいが経年劣化というものは付きものなのですが、特にプラスチック部分や両面テープ部分などは経年劣化がどうしても起きてきてしまいます。 そんな車でも長めにお気に入りの愛車となれば長…

    もっと読む

  3. アイドリングストップシステム異常警告灯表示対処方法 13PV

    2010年前後以降の車に搭載されていることの多いアイドリングストップシステム。各自動車メーカーによって呼び名は異なりますが、機能としては信号待ちが長い時や停止時間が長い時などに勝手に(自動的に)アイド…

    もっと読む

  1. キーレスリモコン破損

    車のキーナンバー確認方法。キーレス紛失や壊れた時 29PV

    初めての経験でした。(汗)…。 キーレスエントリー、キーレスリモコンがついた鍵がエンジンを回す時にボキッと折れてしまいました。(汗)…。 プラスチックの本体部分と鉄のキー部分が分裂してしまいました。 …

    もっと読む

  2. エクストレイルT32運転席側バイザーメッキモール剥がれ修復方法とオススメ両面テープ 26PV

    車の購入後、乗ろうが乗らまいが経年劣化というものは付きものなのですが、特にプラスチック部分や両面テープ部分などは経年劣化がどうしても起きてきてしまいます。 そんな車でも長めにお気に入りの愛車となれば長…

    もっと読む

  3. アイドリングストップシステム異常警告灯表示対処方法 13PV

    2010年前後以降の車に搭載されていることの多いアイドリングストップシステム。各自動車メーカーによって呼び名は異なりますが、機能としては信号待ちが長い時や停止時間が長い時などに勝手に(自動的に)アイド…

    もっと読む

アイキャッチ画像を毎回設定するために、いろいろと作成したらりフリー素材を使用したり意外と大変ですね。そこで、プラグインを使用してのアイキャッチ画像自動生成をするコードを作成してみました。背景色やフォントなどを指定し自動保存時にはアイキャッチ画像を設定せずに投稿時にタイトルを中央部分に設定したものになります。

この記事を読む方へのオススメ

アイキャッチ画像自動生成コードはいかになります。

/**
 * 自動的にアイキャッチ画像を生成して設定する関数
 * 
 * この関数は投稿が保存される際に自動的にアイキャッチ画像を生成し、設定します。
 * 画像には投稿のタイトルがテキストとして描画されます。
 */
function generate_featured_image_with_title_url_category( $post_id ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
    if ( wp_is_post_revision($post_id) ) return;
    if ( get_post_type($post_id) !== 'post' ) return;
    if ( has_post_thumbnail($post_id) ) return;

    $post = get_post($post_id);
    if ( !$post ) return;

    $title = get_the_title($post_id);
    $site_url = get_bloginfo('url');

    // カテゴリ名取得(複数ある場合は最初のみ使用)
    $categories = get_the_category($post_id);
    $category_name = $categories && ! is_wp_error($categories) ? $categories[0]->name : '';

    // 設定
    $width = 1200;
    $height = 630;
    $font_size = 20;
    $font_file = __DIR__ . '/fonts/ARIAL.TTF'; // フォントをテーマ内に配置

    // 透過PNG用のTrueColor画像を作成
    $image = imagecreatetruecolor($width, $height);
    // アルファチャネルを有効にし、完全なアルファチャネル情報を保存
    imagealphablending($image, false);
    imagesavealpha($image, true);

    // 背景色を青(rgba(0, 0, 250, 1))に設定
    $bg_color = imagecolorallocatealpha($image, 0, 0, 250, 0); // 透過なし
    imagefill($image, 0, 0, $bg_color);

    // 色設定
    $white = imagecolorallocate($image, 255, 255, 255);
    $black = imagecolorallocate($image, 0, 0, 0);

    // --- タイトル(中央) ---
    $bbox = imagettfbbox($font_size, 0, $font_file, $title);
    $text_width = $bbox[2] - $bbox[0];
    $x = ($width - $text_width) / 2;
    $y = ($height / 2) + ($font_size / 2);

    $offsets = [-1, 0, 1];
    foreach ($offsets as $ox) {
        foreach ($offsets as $oy) {
            if ($ox === 0 && $oy === 0) continue;
            imagettftext($image, $font_size, 0, $x + $ox, $y + $oy, $black, $font_file, $title);
        }
    }
    imagettftext($image, $font_size, 0, $x, $y, $white, $font_file, $title);

    // --- サイトURL(右下) ---
    $url_font_size = 14;
    $url_bbox = imagettfbbox($url_font_size, 0, $font_file, $site_url);
    $url_width = $url_bbox[2] - $url_bbox[0];
    $url_x = $width - $url_width - 20;
    $url_y = $height - 20;

    foreach ($offsets as $ox) {
        foreach ($offsets as $oy) {
            if ($ox === 0 && $oy === 0) continue;
            imagettftext($image, $url_font_size, 0, $url_x + $ox, $url_y + $oy, $black, $font_file, $site_url);
        }
    }
    imagettftext($image, $url_font_size, 0, $url_x, $url_y, $white, $font_file, $site_url);

    // --- カテゴリ名(左下) ---
    if ( $category_name ) {
        $cat_font_size = 14;
        $cat_bbox = imagettfbbox($cat_font_size, 0, $font_file, $category_name);
        $cat_x = 20;
        $cat_y = $height - 20;

        foreach ($offsets as $ox) {
            foreach ($offsets as $oy) {
                if ($ox === 0 && $oy === 0) continue;
                imagettftext($image, $cat_font_size, 0, $cat_x + $ox, $cat_y + $oy, $black, $font_file, $category_name);
            }
        }
        imagettftext($image, $cat_font_size, 0, $cat_x, $cat_y, $white, $font_file, $category_name);
    }

    // 保存・添付処理
    $upload_dir = wp_upload_dir();
    $filename = 'generated-thumb-' . $post_id . '.png'; // 拡張子をPNGに変更
    $filepath = $upload_dir['path'] . '/' . $filename;

    // PNG形式で保存
    imagepng($image, $filepath);
    imagedestroy($image);

    $filetype = wp_check_filetype($filename, null);
    $attachment = [
        'post_mime_type' => $filetype['type'],
        'post_title'     => sanitize_file_name($filename),
        'post_content'   => '',
        'post_status'    => 'inherit'
    ];

    $attach_id = wp_insert_attachment($attachment, $filepath, $post_id);
    require_once ABSPATH . 'wp-admin/includes/image.php';
    $attach_data = wp_generate_attachment_metadata($attach_id, $filepath);
    wp_update_attachment_metadata($attach_id, $attach_data);

    set_post_thumbnail($post_id, $attach_id);
}
add_action('save_post', 'generate_featured_image_with_title_url_category');

上記のコードを子テーマのfunction.phpに追加すると背景色が薄い青色で、タイトルを中央部分にし縁取りされてサイトのURLが右下に表示されるようになり左下にカテゴリを表示されるようになります。

フォントは、ARIAL.TTF(arial.ttf)に指定している為、サーバー内にfontフォルダディレクトリを作りfontフォルダ内にARIAL.TTF(arial.ttf)をアップロードしてください。

他にも、sans-selifJP.ttfなど日本語が使用可能なフォントであれば文字化けしないので、フォントはご自分の好みに合わせて変更してみてください。

上記のように投稿前は自動的にアイキャッチ画像が設定されます。

背景色をグレー色や黒色などの場合は以下のようになります。

背景色がグレー色の場合です。

背景色を透過させないのであれば、jpg画像にて生成するfunction.phpのコードは以下になります。

/**
 * 自動的にアイキャッチ画像を生成して設定する関数
 * 
 * この関数は投稿が保存される際に自動的にアイキャッチ画像を生成し、設定します。
 * 画像には投稿のタイトルがテキストとして描画されます。
 */

function generate_featured_image_with_title_url_category( $post_id ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
    if ( wp_is_post_revision($post_id) ) return;
    if ( get_post_type($post_id) !== 'post' ) return;
    if ( has_post_thumbnail($post_id) ) return;

    $post = get_post($post_id);
    if ( !$post ) return;

    $title = get_the_title($post_id);
    $site_url = get_bloginfo('url');

    // カテゴリ名取得(複数ある場合は最初のみ使用)
    $categories = get_the_category($post_id);
    $category_name = $categories && ! is_wp_error($categories) ? $categories[0]->name : '';

    // 設定
    $width = 1200;
    $height = 630;
    $font_size = 20;
    $font_file = __DIR__ . '/fonts/ARIAL.TTF'; // フォントをテーマ内に配置

    $image = imagecreatetruecolor($width, $height);
    $bg_color = imagecolorallocate($image, 200, 200, 200); // グレー
    imagefill($image, 0, 0, $bg_color);

    // 色設定
    $white = imagecolorallocate($image, 255, 255, 255);
    $black = imagecolorallocate($image, 0, 0, 0);

    // --- タイトル(中央) ---
    $bbox = imagettfbbox($font_size, 0, $font_file, $title);
    $text_width = $bbox[2] - $bbox[0];
    $x = ($width - $text_width) / 2;
    $y = ($height / 2) + ($font_size / 2);

    $offsets = [-1, 0, 1];
    foreach ($offsets as $ox) {
        foreach ($offsets as $oy) {
            if ($ox === 0 && $oy === 0) continue;
            imagettftext($image, $font_size, 0, $x + $ox, $y + $oy, $black, $font_file, $title);
        }
    }
    imagettftext($image, $font_size, 0, $x, $y, $white, $font_file, $title);

    // --- サイトURL(右下) ---
    $url_font_size = 14;
    $url_bbox = imagettfbbox($url_font_size, 0, $font_file, $site_url);
    $url_width = $url_bbox[2] - $url_bbox[0];
    $url_x = $width - $url_width - 20;
    $url_y = $height - 20;

    foreach ($offsets as $ox) {
        foreach ($offsets as $oy) {
            if ($ox === 0 && $oy === 0) continue;
            imagettftext($image, $url_font_size, 0, $url_x + $ox, $url_y + $oy, $black, $font_file, $site_url);
        }
    }
    imagettftext($image, $url_font_size, 0, $url_x, $url_y, $white, $font_file, $site_url);

    // --- カテゴリ名(左下) ---
    if ( $category_name ) {
        $cat_font_size = 14;
        $cat_bbox = imagettfbbox($cat_font_size, 0, $font_file, $category_name);
        $cat_x = 20;
        $cat_y = $height - 20;

        foreach ($offsets as $ox) {
            foreach ($offsets as $oy) {
                if ($ox === 0 && $oy === 0) continue;
                imagettftext($image, $cat_font_size, 0, $cat_x + $ox, $cat_y + $oy, $black, $font_file, $category_name);
            }
        }
        imagettftext($image, $cat_font_size, 0, $cat_x, $cat_y, $white, $font_file, $category_name);
    }

    // 保存・添付処理
    $upload_dir = wp_upload_dir();
    $filename = 'generated-thumb-' . $post_id . '.jpg';
    $filepath = $upload_dir['path'] . '/' . $filename;

    imagejpeg($image, $filepath, 90);
    imagedestroy($image);

    $filetype = wp_check_filetype($filename, null);
    $attachment = [
        'post_mime_type' => $filetype['type'],
        'post_title'     => sanitize_file_name($filename),
        'post_content'   => '',
        'post_status'    => 'inherit'
    ];

    $attach_id = wp_insert_attachment($attachment, $filepath, $post_id);
    require_once ABSPATH . 'wp-admin/includes/image.php';
    $attach_data = wp_generate_attachment_metadata($attach_id, $filepath);
    wp_update_attachment_metadata($attach_id, $attach_data);

    set_post_thumbnail($post_id, $attach_id);
}
add_action('save_post', 'generate_featured_image_with_title_url_category');

過去のアイキャッチ画像自動生成コードに関する記事は以下になります。参考にしてみてください。

Windows10サポート終了まで

Multiplex 広告

あなたにおすすめな関連記事

アプリーチCSS最終型

Android iPhone PC スマホ ツール 伝えたいこと 備忘録

アプリーチCSSデザインでiTunesアフィリエイトプログラム(PHG)を使い方法

もうアフィリエイトをしている人には知れ渡っているかもしれませんが、アプリーチというままはっくさんの旦那さんが作ったツール?サイトがあります。 同じような便利なツールとしてカエレバブックマークレットなど…

もっと読む

インフィード広告アドセンス

invoice迷惑メール

セキュリティ 伝えたいこと

Invoice#という迷惑メールはVVVウイルスと同じランサムウェア

 昨年に流行ったVVVウイルスというウイルスがありました。これは、PC内のファイルをすべて拡張子を.vvvという拡張子に変更してしまい、PC自体を起動不能にしてしまったりするランサムウェアで…

もっと読む

インフィード広告アドセンス

シャープ製の不織布マスク抽選サイト画像

伝えたいこと 備忘録 時事ネタ

シャープ製国内産不織布マスクとN95マスクとコンビニ、薬局、ネットの不織布マスク

もう一昨年になりますね。2020年4月に1回目の緊急事態宣言が発出され、その前は医療現場でさえマスク不足になり街のコンビニや薬局、はたまたネットからもマスクがなくなり国がSHARP(シャープ)に国産の…

もっと読む

インフィード広告アドセンス

Stinger6カスタマイズ備忘録

WordPress カスタマイズ メンテナンス

Stinger6カスタマイズアドセンス広告設定備忘録

この度、 これまではBloggerにてブログ運営をしてきて、 カスタマイズもそれなりにして、 アクセス数もまずまずとなっています。 ですが、 WordPressにてデビューをしてみたいと思い、 無料サ…

もっと読む

インフィード広告アドセンス

PL学園時代KKコンビ

伝えたいこと 備忘録

清原さん、残念ですが…。面識もない一般人が記事を書くのを迷っていました。

 清原和博と言えば、 中高年世代の甲子園のヒーローでした。 その少し下の世代になると、 松坂大輔さんなど松坂世代と言われた世代の方たちがヒーローとなって世代交代と言いますか、世代に…

もっと読む

インフィード広告アドセンス

パルスオキシメーター酸素飽和度測定

伝えたいこと 治療

パルスオキシメーター酸素飽和度測定おすすめ

今年に入ってから新型コロナの報道や情報ばかりで辟易してしまいますね。でも、軽症者や無症状者もいる中で重症者やお亡くなりになられた方もいらっしゃる事実・・・。この報道されている数字をどう考えるのかはさて…

もっと読む

【AmazonタイムセールSALE車&バイク】!


人気の商品が日替わりで登場。毎日お得なタイムセール「Amazonタイムセール全体」

出展:Amazonタイムセール

人気の商品が日替わりで登場。毎日お得なタイムセール

あなたが訪問してから

0 秒経過 🎉

入学入社まであと…入学入社祝いはどんなPresent(プレゼント)でどのように過ごされますか?

ホワイトデープレゼントは以下などの豊富なキャンペーン商品から選ぶと良いと思います。

ブログサービスが始まってから:


カウントダウンタイマー

おすすめの記事一部広告

Total50


アドセンス336pxPC閲覧記事下表示1つ目コード

目次に戻る

よろしかったらシェアよろしくお願いします。

-WordPress, カスタマイズ, 伝えたいこと, 備忘録

目次に戻る

目次に戻る


コメントを閉じる

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


This site uses Akismet to reduce spam. Learn how your comment data is processed.