メディアライブラリ画像のタイトル名を指定して一括変換

メディアライブラリ画像のタイトル名を指定して一括変換

WordPressのメディアライブラリにあるすべての画像(添付ファイル)のタイトルと代替テキスト(ALT)を、その画像が紐づいている(添付されている)投稿記事のIDをもとに一括変換したい。

functions.phpに記述するコードを作成。

事前の注意点:データベースの情報を一括で書き換えるため、万が一に備えて必ず事前にデータベースのバックアップを取ってから作業を行うこと。

『指定したタイトル名』だけを別の『タイトル』に変更する

例えば、『記事ID-◯◯◯◯』を『投稿記事 ID-◯◯◯◯』に変更。
『アイキャッチ画像 = ID ◯◯◯◯』を『投稿アイキャッチ画像 = ID ◯◯◯◯』に変更。
というようにタイトル名を特定して指定のテキストに変更するコードになる。

このコードを入れて『ファイルを更新』ボタンをクリック。
ブラウザのURLの末尾(function.phpを開いているページ)に

&run_media_replace=1

を付けてエンターキーを押す。

実際のpolo-web.comでは以下のようになる。

https://polo-web.com/wp-admin/theme-editor.php?file=functions.php&theme=ystandard-child&run_media_replace=1

指定のタイトルは8と9行目で変更することが出来る。

function bulk_replace_media_titles_and_alt() {
    // 管理者でログインしており、特定のパラメータがある場合のみ実行
    if ( is_admin() && current_user_can('manage_options') && isset($_GET['run_media_replace']) ) {
        
        // --------------------------------------------------
        // 【設定エリア】ここを変更したい文字に書き換えてください
        // --------------------------------------------------
        $search_text  = '記事ID-';          // 探す文字(変換前)
        $replace_text = '投稿記事_ID = ';     // 置き換える文字(変換後)
        // --------------------------------------------------

        // すべてのメディア(添付ファイル)を取得
        $args = array(
            'post_type'      => 'attachment',
            'post_status'    => 'inherit',
            'posts_per_page' => -1,
        );
        
        $attachments = get_posts($args);
        $count = 0;

        foreach ($attachments as $attachment) {
            $current_title = $attachment->post_title;

            // タイトルに「探す文字」が含まれているかチェック
            if ( strpos($current_title, $search_text) !== false ) {
                
                // 文字列を置換して新しいタイトルを作成
                $new_title = str_replace($search_text, $replace_text, $current_title);

                // 1. タイトルの更新
                $updated_attachment = array(
                    'ID'         => $attachment->ID,
                    'post_title' => $new_title,
                );
                wp_update_post($updated_attachment);

                // 2. 代替テキスト(ALT)の更新
                update_post_meta($attachment->ID, '_wp_attachment_image_alt', $new_title);

                $count++;
            }
        }

        // 実行完了メッセージを表示して処理を止める
        wp_die( '「' . $search_text . '」から「' . $replace_text . '」への置換が完了しました。計 ' . $count . ' 件更新しました。' );
    }
}
add_action('admin_init', 'bulk_replace_media_titles_and_alt');

以下が出れば成功になる。

メディアライブラリの画像のタイトル名を一括変換
  • 親記事がない画像(未添付の画像)については、IDが取得できないため書き換えを行わずスキップする仕様にしています(エラー防止のため)。
  • すでに設定されているタイトルやALTテキストは上書きされます。

投稿ページとアイキャッチ画像の『タイトル名』を一括で変更する

以下のコードでは一括変換できるが、投稿ページに張り込んだ画像からアイキャッチ画像まで、全てのタイトル名が指定の文字に変わってしまう。

function bulk_update_media_titles_and_alt() {
    // 管理者権限を持つユーザーがログインしている、かつ特定のパラメータがある場合のみ実行
    if ( is_admin() && current_user_can('manage_options') && isset($_GET['run_media_update']) ) {
        
        // すべてのメディア(添付ファイル)を取得
        $args = array(
            'post_type'      => 'attachment',
            'post_status'    => 'inherit',
            'posts_per_page' => -1, // 全件対象
        );
        
        $attachments = get_posts($args);
        $count = 0;

        foreach ($attachments as $attachment) {
            // 画像が紐づいている親投稿のIDを取得
            $parent_id = $attachment->post_parent;

            // 親投稿が存在する場合のみ処理
            if ( $parent_id ) {
                // 新しいタイトルを「投稿記事_ID = ◯◯◯◯」の形式にする
                $new_title = '投稿記事_ID = ' . $parent_id;

                // 1. タイトルの更新
                $updated_attachment = array(
                    'ID'         => $attachment->ID,
                    'post_title' => $new_title,
                );
                wp_update_post($updated_attachment);

                // 2. 代替テキスト(ALT)の更新
                update_post_meta($attachment->ID, '_wp_attachment_image_alt', $new_title);

                $count++;
            }
        }

        // 実行完了メッセージを表示して処理を止める
        wp_die( $count . ' 件のメディアのタイトルとALTを「投稿記事_ID = 親ID」に更新しました。' );
    }
}
add_action('admin_init', 'bulk_update_media_titles_and_alt');

※現在のURLの末尾に、そのまま &run_media_update=1 を付け足した形です。

https://sasebo.geo.jp/wp-admin/theme-editor.php?file=functions.php&theme=ystandard-child&run_media_update=1
一括変換

パターンA(一番確実です)

texthttps://your-domain.com/wp-admin/?run_media_update=1

コードは注意してご使用ください。※ wp-admin/ の後ろに ?run_media_update=1 を付けます。

パターンB(ダッシュボードのURLの末尾に付ける場合)

texthttps://your-domain.com/wp-admin/index.php?run_media_update=1

コードは注意してご使用ください。※ すでにURLに ? が含まれている画面(例: index.php?page=… など)の場合は、末尾を &run_media_update=1 にしてください。

実行後の処理

同じ内容なら、片方をクローラーが来ないようにする必要があるので、httacsesの処理とWprdPeessの処理が必要。

メディアライブラリの画像のタイトル名を一括変換
メディアライブラリの画像のタイトル名を一括変換
メディアライブラリの画像のタイトル名を一括変換