現在の接続環境は
です

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

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

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

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

所要時間目安:8

This session is using  IPv4  is established in

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

目次に行く・戻る

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

  • 本日
  • 週間
  • 月間
  1. エンジンスターターリモコン

    カーメイトのエンジンスターターでエラー15表示と対処方法 4PV

    夏冬に特に重宝するのが、エンジンスターターです。 メーカーはCARMATEやCOMTECユピテルなど各社ありますが、一番のオススメはリモコンから多くの情報を得ることができるカーメイト製品です。 なぜか…

    もっと読む

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

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

    もっと読む

  3. 喪中はがき

    喪中はがきや年賀状の挨拶文書き方と例文オススメのサイトなど。 3PV

    この時期になりますと、年賀状の準備や年賀状の支度はもちろんですが、年内に身内の方が亡くなってしまった方々は喪中はがきを作成することになると思われます。そういう私もそうなのですが、以前に(3年前だったか…

    もっと読む

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

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

    もっと読む

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

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

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

    もっと読む

  3. エンジンスターターリモコン

    カーメイトのエンジンスターターでエラー15表示と対処方法 16PV

    夏冬に特に重宝するのが、エンジンスターターです。 メーカーはCARMATEやCOMTECユピテルなど各社ありますが、一番のオススメはリモコンから多くの情報を得ることができるカーメイト製品です。 なぜか…

    もっと読む

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

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

    もっと読む

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

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

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

    もっと読む

  3. エンジンスターターリモコン

    カーメイトのエンジンスターターでエラー15表示と対処方法 16PV

    夏冬に特に重宝するのが、エンジンスターターです。 メーカーはCARMATEやCOMTECユピテルなど各社ありますが、一番のオススメはリモコンから多くの情報を得ることができるカーメイト製品です。 なぜか…

    もっと読む

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

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

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

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

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

WordPress日本語化

WordPress アップグレード 伝えたいこと 備忘録

WordPressを日本語化する方法と設定は実は1秒でできる…。

先日(昨日)WordPressのバージョンをやっとこさ4.5.2の最新版にしました。なぜか?それは一番はセキュリティ上の問題の解消ですが、他にもサイトのページ表示速度が、もしかしたら速くなるかもなんて…

もっと読む

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

HIVウイルス

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

ロシア50人に1人がHIV感染で「大流行」宣言。日本も他人事ではない?

こういうのって…。 ほんとうにもどかしいというのでしょうか・・・・。なぜHIV感染が広がってしまうのか?この記事はロシア中部ということですが、我が国日本においても他人事ではないと思われます。 数年前に…

もっと読む

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

jetpackのCSS内容無効化

WordPress カスタマイズ 備忘録

jetpackの自動出力されるCSSを無効化で出力しないようにする方法

WordPressの有名なプラグインはいくつかあります。そんな中のひとつで多機能(ある意味重い?)なプラグインでjetpackがあります。使っている機能は人それぞれかと思われますが、私はphotonと…

もっと読む

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

メンテナンス 伝えたいこと 備忘録 時事ネタ

ガソリンが高いトリガー条項は?一番安いガソリンスタンドは?go.go.gs

一昨年・昨年からガソリン代(ガソリン価格)が全国的に上がり高くなっています。その原因はなんなのかはおそらく海外との情勢などが影響しているのだと思われます。 2000年代後半にも、一時期ガソリン価格が1…

もっと読む

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

仮歯が外れてしまった

伝えたいこと 備忘録 噛みあわせ 治療

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

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

もっと読む

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

Windows10

PC Windows10 カスタマイズ 伝えたいこと 備忘録 設定

Windows10アップデート後に勝手に再起動するのを止める方法

もうWindows10が発売リリースされて1年半くらい経ちました。 一昨年のリリース元年の11月にはth1511の大幅アップデートがあり、昨年の夏8月2日にもAnniversaryUpdateがありま…

もっと読む

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


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

出展:Amazonタイムセール

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

あなたが訪問してから

0 秒経過 🎉

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

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

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


カウントダウンタイマー

おすすめの記事一部広告

Total349


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

目次に戻る

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

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

目次に戻る

目次に戻る


コメントを閉じる

comment

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


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