プラグインなしでWordPressの画像入れ替えをする

同名メディアファイルの入れ替え・差し替えができないWordPress

WordPressのメディアライブラリから同じファイル名のメディアをアップロードすると

ファイル名の末尾に-1などの連番が勝手に付けられて上書き保存ができません。

画像の入れ替えをできるようにするプラグインとしてはEnable Media Replaceが有名ですが、



Enable Media Replaceで画像を入れ替えるとfunctions.phpを使ったWebPへの自動変換ができず、

WebPを作るために画像を一旦削除してから再アップロードしていました。

さすがにそれは面倒なので、プラグインを使わずに画像を入れ替える方法を検索したらわりとアッサリ見つかったので共有します。

プラグインなしで同名の画像アップロード時に入れ替えるコード

以下のURLの解答3のコードをfunctions.phpに記述すると同名の画像を上書きできます。

theme development - How to force Media manager to overwrite files of same name? - WordPress Development Stack Exchange

匿名関数にして現代風の書き方に変更すると以下。


add_filter('sanitize_file_name', function ($name) {
    $args = [
        'numberposts'   => -1,
        'post_type'     => 'attachment',
        'meta_query' => [
            [
                'key' => '_wp_attached_file',
                'value' => $name,
                'compare' => '='
            ]
        ]
    ];
    $attachments_to_remove = get_posts($args);

    foreach ($attachments_to_remove as $attach) {
        wp_delete_attachment($attach->ID, true);
    }

    return $name;
});

コードの中身としては

  • アップロードした画像のファイル名をチェックするフィルター、sanitize_file_name内で
  • アップロードした画像ファイル名と一致する既存のメディアファイルを全部削除する

と言うコードになっています。

meta_queryのcompareは元のソースコードではLIKE検索になっていますが、

完全一致検索で問題ないので=に変更しました。

WordPress関連記事



サイトについて

スマートフォンで海外FX&ビットコイン取引をする方法の解説。TariTali推し。

検索

カテゴリー