##説明
WordPressの投稿画面から画像をアップロードする際、画像のファイル名を記事IDに合わせて自動で変更します。
##ご注意
・記事の投稿画面(ブロックエディタ、クラシックエディタ)から画像をアップロードして挿入する場合のみ動作確認済みです。
・メディアライブラリへ直接アップロードする場合、画像ファイル名は変更されますが、メディアタイトルとして元のファイル名が残ります。
・変更は自己責任でお願いいたします。
##コード
以下をfunctions.phpに貼り付けてください。
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'] : '';
}
// ファイル拡張子を取得
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
// 記事IDをファイル名とする
if( $post_id ){
$filename_new = $post_id;
// メディアライブラリへ直接アップロードした場合のファイル名(日付時刻)
}else{
$filename_new = date_i18n('ymdHi');
}
//ファイル名+拡張子を出力
return $filename_new.'.'.$ext;
}
add_filter('sanitize_file_name', 'rename_file', 10);
参考:ねんでぶろぐ様
日本語名の画像ファイルアップロード時、ファイル名を英数字に変更する(ブロックエディタ対応)
https://nendeb.com/815
クラシックエディタを使った場合、ファイル名の変更はされますが、メディアタイトルとして元のファイル名が残ってしまうようです。
対策として、以下のコードを追加してタイトルの設定をします。
function rename_media_title($response, $attachment, $meta){
global $filename_new;
//変更後のファイル名をメディアタイトルに使用
$response['title'] = $filename_new;
return $response;
}
add_filter('wp_prepare_attachment_for_js', 'rename_media_title', 10, 3);
参考:わんどのweb様
WordPressで画像のtitle属性の初期値を変更する | わんどのweb
https://wandonoweb.com/wordpress%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AEtitle%E5%B1%9E%E6%80%A7%E3%81%AE%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/)様
これでブロックエディタ・クラシックエディタともに、画像ファイル名・メディアタイトルが自動で変更されます。