画像のアップロード時の自動変換コード – fanction.php

画像のアップロード時の自動変換コード – fanction.php

2026年10月1日

投稿ページとアイキャッチ画像への画像挿入、メディアライブラリへの直アップ時のファイルの自動変換コード。

以下のコードは3つのコードの分かれている。

  • 新規にページに貼り付ける画像のタイトルを「記事ID = ◯◯◯」に、それと「ALT」を自動挿入するコード。ALTは記事のタイトルをそのまま入れることになる。
  • 画像アップロード時に画像の「ファイル名」を「post-id-◯◯◯◯◯」に自動変換する。
  • 右サイドの「アイキャッチ画像を設定」でアップロードされた場合のみ、ファイル名を「記事ID」に変更する

実際にfanction.phpに入れているコードがこれになる。

/**
 * 新規にアップロードする画像にタイトルに「記事ID=◯◯◯」、それと「ALT」を自動挿入するコード
 */

add_action('add_attachment', 'update_image_meta_data');
function update_image_meta_data($attachment_id) {
    // 添付ファイルが画像かどうかをチェック
    if (!wp_attachment_is_image($attachment_id)) {
        return;
    }

    $parent_id = 0;
    if (isset($_REQUEST['post'])) {
        $parent_id = intval($_REQUEST['post']);
    } else {
        $parent_id = wp_get_post_parent_id($attachment_id);
    }

    if ($parent_id > 0) {
        // 親記事のタイトルを取得
        $parent_title = get_the_title($parent_id);

        // 【設定】代替テキスト(alt)にする文字列(親記事のタイトル)
        $alt_text = $parent_title; 

        // 1. タイトル(post_title)を「記事ID: 〇〇」に更新
        $new_title = '記事ID = ' . $parent_id;
        wp_update_post([
            'ID'         => $attachment_id,
            'post_title' => $new_title,
            'post_name'  => sanitize_title($new_title)
        ]);

        // 2. 代替テキスト(alt属性)を更新
        update_post_meta($attachment_id, '_wp_attachment_image_alt', $alt_text);
    }
}


/**
 * 画像アップロード時に画像の「ファイル名」を「post-id-◯◯◯◯◯」に自動変換する
 */

function rename_file($filename) {

    global $filename_new;

    // 記事ID取得 (クラシックエディタ)
    $post_id = isset( $_POST['post_id'] ) ? (int)$_POST['post_id'] : ''; 
    // 記事ID取得 (ブロックエディタ)
    if( !$post_id ){
        $post_id = isset( $_POST['post'] ) ? (int)$_POST['post'] : ''; 
    }

    // ファイル拡張子を取得、jpgとかpngとか
    $ext = pathinfo( $filename, PATHINFO_EXTENSION );   

    // 記事IDをファイル名とする
    if( $post_id ){
        $filename_new = $post_id;

    // メディアライブラリへ直接アップロードした場合のファイル名(日付時刻)
    }else{
        $filename_new = date_i18n('ymdHi');
    }
    //ファイル名+拡張子を出力(実際に固定出力されるファイル名と流動的なID番号+拡張子)
    return 'post-id-'.$filename_new.'.'.$ext;
}


/**
 * 右サイドの「アイキャッチ画像を設定」でアップロードされた場合のみ、ファイル名を「記事ID=◯◯◯」に変更する
 */
add_filter('wp_handle_upload_prefilter', 'rename_featured_image_to_post_id');

function rename_featured_image_to_post_id($file) {
    // 現在編集中の投稿ID(記事ID)を取得
    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    
    // アイキャッチ画像のアップロード時(actionが"upload-attachment")かつ、有効な記事IDがある場合のみ処理
    if (isset($_POST['action']) && $_POST['action'] === 'upload-attachment' && $post_id > 0) {
        
        // ファイルの拡張子を取得(例: .jpg , .png)
        $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
        
        // 新しいファイル名を「記事ID.拡張子」にする(例: 123.jpg)
        $file['name'] = $post_id . '.' . strtolower($ext);
    }
    
    return $file;
}

実際に入れているコードのコメントは少し違ったいるが、これが本当。中身は全く同じ。
機会があれば本番環境で入れ替えてほしい。

スポンサーリンク

polo-web

Macにハマって30年近く、毎日コンピュターの前に座って時間を過ごしている。

お陰で頭痛との戦いである。