投稿ページとアイキャッチ画像への画像挿入、メディアライブラリへの直アップ時のファイルの自動変換コード。
以下のコードは3つのコードの分かれている。
- 新規にページに貼り付ける画像のタイトルを「記事ID = ◯◯◯」に、それと「ALT」を自動挿入するコード。ALTは記事のタイトルをそのまま入れることになる。
- 画像アップロード時に画像の「ファイル名」を「post-id-◯◯◯◯◯」に自動変換する。
- 右サイドの「アイキャッチ画像を設定」でアップロードされた場合のみ、ファイル名を「記事ID」に変更する
実際にfanction.phpに入れているコードがこれになる。
/**
* 新規にアップロードする画像にタイトルに「記事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);
}
}
/**
* 画像アップロード時に画像の「ファイル名」を「post-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('wp_handle_upload_prefilter', 'rename_featured_image_to_post_id');
function rename_featured_image_to_post_id($file) {
// 現在編集中の投稿ID(記事ID)を取得
$post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
// アイキャッチ画像のアップロード時(actionが"upload-attachment")かつ、有効な記事IDがある場合のみ処理
if (isset($_POST['action']) && $_POST['action'] === 'upload-attachment' && $post_id > 0) {
// ファイルの拡張子を取得(例: .jpg , .png)
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
// 新しいファイル名を「記事ID.拡張子」にする(例: 123.jpg)
$file['name'] = $post_id . '.' . strtolower($ext);
}
return $file;
}実際に入れているコードのコメントは少し違ったいるが、これが本当。中身は全く同じ。
機会があれば本番環境で入れ替えてほしい。

