画像のアップロード時、メディアライブラリでどのように表示されるのか(fanction.phpに入れた場合)

画像のアップロード時、メディアライブラリでどのように表示されるのか(fanction.phpに入れた場合)

このページのURLがhttps://polo-web.com/wp-admin/post.php?post=28101&action=editとした場合
このpost=28101をタイトル名とファイル名の入れて、画像がどこに使われているかをすぐに確認できるようにしている。画像をページに入れる際、タイトル名とファイル名は自動変換されるので楽である。

「投稿ページ」に画像を入れる場合

画像の投稿テスト

ページの右にあるメディアのところにも変換されたファイル名が表示されるので結果を確認することができる。

画像の投稿テスト

uploadsフォルダに作成されるファイル(以下の3つが作成される):
post-id-28101.jpg、post-id-28101-150×150.jpg、post-id-28101-300×115.jpg

右サイドの「アイキャッチ画像を設定」に画像を入れた場合

「アイキャッチ画像を設定」の窓にドロップして入れた場合も以下のようになる。

画像の投稿テスト

できれば、アイキャッチであることがわかるといいが、例えば「アイキャチ投稿ID =」とか。
これでもいいか。

uploadsフォルダに作成されるファイル(以下の4つが作成される):
post-id-28101-1.jpg、post-id-28101-1-150×150.jpg、post-id-28101-1-300×169.jpg、post-id-28101-1-768×432.jpg

直接「メディアライブラリ」に画像アップロードする場合

直接メディアライブラリに入れると、投稿IDを取得できないのでファイル名を日付に変換して入れている。
タイトルは元画像のファイル名がそのまま使われるので、後で手作業で変更する必要がある。
この場合、ちょっと面倒になるが、そんなに多くは無いと思うので手作業で修正すること。

画像の投稿テスト

uploadsフォルダに作成されるファイル(以下の2つが作成される):
post-id-2610021554.png、post-id-2610021554-150×150.png

「WP Random Post Thumbnails」プラグインに画像を入れる場合

設定 > Random Thumbnails から入れる場合。

以下のようにタイトルは元画像のファイル名がそのまま入り、ファイル名は日付に変換されている。

画像はRandom Thumbnailsのプラグインで使われているにもかかかわらず、右側が未添付になっていることに注意。Media Scan等のプラグインは削除の対象になるので注意が必要である。

画像の投稿テスト

uploadsフォルダに作成されるファイル(以下の4つが作成される):
post-id-2610021610.png、post-id-2610021610-150×150.png、post-id-2610021610-300×169.png、post-id-2610021610-768×432.png

これは使われる位置が不明なので沢山のサムネイルが用意されていると思われる。

uploadsフォルダに作成されるファイル

これは、アップロードする位置によって、それにあったファイルが作成される。

function.phpに作成されるコード

以下の全てのfunction.phpに入れている。Google AIに作成してもらった。

/**
 * 新規にアップロードする画像にタイトルに「投稿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);
    }
}



/**
 * 画像アップロード時に画像の「ファイル名」を「投稿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('sanitize_file_name', 'rename_file', 10);

function auto_set_featured_image_from_content( $post_id ) {
    // リビジョンや自動保存の場合は何もしない
    if ( wp_is_post_revision( $post_id ) || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) ) {
        return;
    }

    // すでにアイキャッチが設定されている場合は上書きしない(お好みで変更可)
    if ( has_post_thumbnail( $post_id ) ) {
        return;
    }

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

    // 本文から最初の<img>タグを正規表現で探す
    $output = preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches );
    
    if ( $output && isset( $matches[1][0] ) ) {
        $image_url = $matches[1][0];
        
        // URLから添付ファイルID(メディアID)を取得
        $attachment_id = attachment_url_to_postid( $image_url );
        
        if ( $attachment_id ) {
            // アイキャッチ画像として保存
            set_post_thumbnail( $post_id, $attachment_id );
        }
    }
}
add_action( 'save_post', 'auto_set_featured_image_from_content' );

Media Cleanerでスキャンした後、ファイル名をPhoenix Media Renameで変更した場合どうなるのか?

現在、Trashに39、Ignoredに79入っている。これは上を導入してファイル名、その他を変更した時点の状態になる。TRashやIgnoredのファイル名は多分、導入前の古いファイル名で登録されていると思われる。

画像のアップロード時、メディアライブラリでどのように表示されるのか(fanction.phpに入れた場合)

こんな場合、Trashのファイルを移動、削除しないでとあったので、まずスキャンをやり直したいと思う。

まず、キャッシュのクリアをとのことだったが、Media Cleanerにはキャッシュのクリアボタンが無く、自動的にスキャンの際、キャッシュをクリアするらしい。

問題なくスキャンが成功した。

Ignoredに入っているタイトル名を変更するとスキャンでどうなるか

タイトルを「ランダムサムネイル画像」に統一したい。
そんな場合、タイトルを「Phoenix Media Rename」で変更するとエラーになったので出来ない。

以下のように、メディア編集画面で変更すると問題なく変更ができた。スキャンも問題ない。

タイトル名の変更は画像の編集画面で変更するとうまくいく

  1. WordPressの管理画面から [メディア] > [ライブラリ] を開く。
  2. 該当の画像やファイルをクリック、詳細画面の「タイトル」欄を書き換える。
  3. 右側の「更新」ボタンで完了。

この方法なら再スキャンしないでもIgnoredに入っているタイトル名も問題なく変更されている。

WordPressで画像にタイトル名を最初から付けることができるのか?

アップロードしたファイルの拡張子を除いた名前が、そのままタイトルの初期値になるので最初からタイトルを好きなように付けることは出来ない。

変更はイメージの編集画面で行うことができる。ここ以外では出来ない(プラグインを使いならできる)。
タイトルは「ランダムサムネイル画像」と統一しても問題ない。
ランダムに入るのでページIDとは関係ない画像になる。これは全て未添付画像になる。

ここで変更した画像は、スキャンし直さないでもMedia Cleanerで自動的にタイトルが変更されている。