同名メディアファイルの入れ替え・差し替えができないWordPress
WordPressのメディアライブラリから同じファイル名のメディアをアップロードすると
ファイル名の末尾に-1などの連番が勝手に付けられて上書き保存ができません。
画像の入れ替えをできるようにするプラグインとしてはEnable Media Replaceが有名ですが、
Enable Media Replaceで画像を入れ替えるとfunctions.phpを使ったWebPへの自動変換ができず、
WebPを作るために画像を一旦削除してから再アップロードしていました。
さすがにそれは面倒なので、プラグインを使わずに画像を入れ替える方法を検索したらわりとアッサリ見つかったので共有します。
プラグインなしで同名の画像アップロード時に入れ替えるコード
以下のURLの解答3のコードをfunctions.phpに記述すると同名の画像を上書きできます。
匿名関数にして今風の書き方に変更すると以下。
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検索になっていますが、
完全一致検索で問題ないので=に変更しました。
余談: Google検索でEnable Media Replaceを弾く
この記事には『プラグインなし』で検索してたどり着く人が多いのですが、
試しに『プラグインなし』でGoogle検索するとプラグインEnable Media Replace絡みの記事がめちゃくちゃ引っかかりました。
Googleは『-』(ハイフン・マイナス)記号を単語の頭に付けるとその単語を含まない記事の検索ができます。
ただしEnable Media Replaceはスペースを含むので、『"』で囲む必要アリ。
つまりEnable Media Replaceを「含まない」記事を検索するには『-"enable media replace"』とすればOK。
例↓
まぁこの記事のように「Enable Media Replaceを使わない」と言う意思表明をしている記事も引っかからなくなるんですが。
WordPress関連記事
- WordPressテーマUnderStrapのカスタマイズ例
- WordPressのメディアや記事全文の文字を置換して日付も更新するSQL
- プラグインを使わずにWordPressのショートコードで広告を管理する
- WordPressの絵文字やEasy Table of Contents関係のファイルの読み込みを止める
- WordPressの投稿画面のツールバー・ショートカットキーをカスタマイズする
- プラグインなしでアップロード画像をWebPに変換
- プラグインなしでWordPressの画像入れ替えをする