WordPressで画像をアップロードする際に、ファイル名を数字で置換

Last Updated:2024年02月03日| コメントを残す

このブログを始めた当時だけでもハングルURLをサポートしないWebホスティングが結構ありました。特に海外ホスティングではハングルに関して問題はなかったが、国内の一部のウェブホスティングでURLにハングルが使えない問題が発生する笑わないことが発生しました。

幸い、数年前から Cafe24 など、ほとんどの国内ホスティングでもURLにハングルが含まれているとエラーが発生する問題を修正しました。しかし、まだまれですが、URLにハングルが含まれていると問題が発生するホスティングがあります。また、サーバーを直接設定する場合にサーバー設定を誤ってURLにハングルが含まれると問題が発生する場合もあります。

URLにハングルが含まれている場合に問題が発生した場合 WordPressで固有のアドレスを数字で表示するように設定してくれればされるがSEO的な側面では望ましくありません。

そして、ハングルURLの問題が発生した場合、ファイル名にハングルが含まれているメディアファイル/イメージファイルをアップロードすると、画像が壊れます。

WordPressで画像をアップロードする際に、ファイル名を数字で置換

アップロードするメディアファイル名にハングルが含まれている場合は、次のコードを使用してアップロードする画像のファイル名を英語と数字に変更できます。

/** * Produces cleaner filenames for uploads for non-latin languages * アップロード時にファイル名からハングルなどの非英語文字を削除する * * @param string $filename * @return string */ function change_none_latin_file_name( $filename ) { $extension = end(explode(".", $filename)); $append = date('YmdHis'); $sanitized_filename = 'image-' 。 $append 。 '.' 。 $extension; return $sanitized_filename; } add_filter( 'sanitize_file_name'、 'change_none_latin_file_name'、10、1);

ファイル名を 画像20180904135743.jpg 形式で表示されるように設定してみました。 数字の部分は、現在の日付(時分秒を含む)を意味します。

Avadaがインストールされて WordPress サイトでテストしてみると問題なく動作しますね。 他の環境でも正常に動作するようだが、環境に応じて問題を起こす可能性もあります。

PHPの門外漢なのでしっかりとしたコードかは分かりません。 頭の中に思いつくまま適当に作ってみました。 もし文法にエラーがある場合 Naver カフェでお知らせいただきありがとうございます。

ちなみに画像のファイル名にハングルが含まれる場合、後日サイトを移転(Migration)するときにも、イメージファイルが壊れてエラーが発生することがありますので、なるべく画像のファイル名にハングルが含まれていない方がよいことがあります。

2024年2月の更新:コードの改善

これで上記のコードは必要ありませんが、画像ファイルにハングルが含まれている場合は、英語以外の文字と数字の部分を数字に変更する必要がある場合は、次のコードでテストしてください。

/**
 * Sanitizes filenames by removing non-Latin characters and appending a timestamp.
 *
 * @param string $filename The original filename.
 * @return string The sanitized filename.
 */
function sanitize_non_latin_file_name( $filename ) {
    // Separate the filename from its extension.
    $file_parts = pathinfo($filename);
    $extension = isset($file_parts['extension']) ? '.' . $file_parts['extension'] : '';

    // Remove non-Latin characters from the filename, keep digits, Latin letters and some special characters.
    $sanitized_name = preg_replace('/[^a-zA-Z0-9-_\.]/', '', $file_parts['filename']);

    // If after sanitizing the filename is empty (e.g., the name was entirely in non-Latin characters), use a generic name.
    if (empty($sanitized_name)) {
        $sanitized_name = 'file';
    }

    // Append a timestamp to the filename for uniqueness.
    $append = date('YmdHis');
    $sanitized_filename = $sanitized_name . '-' . $append . $extension;

    return $sanitized_filename;
}
add_filter( 'sanitize_file_name', 'sanitize_non_latin_file_name', 10, 1 );

既存のコードをChatGPTで改善しました。必要に応じて機能しない場合は、上記のコードを適切に適用できます。

上記のコードを使用する場合 画像ファイル名に含まれるハングルと特殊文字がハイフン("-")に変わり、最後にアップロード日時(日付と時刻)が追加になります。たとえば、「Filename structure ファイル名構造.webp」をアップロードすると、下図のように「Filename-structure---20240202225522.webp」に変わります。

アップロード時に画像ファイルの名前を変更する

参考までに File Renaming on Upload プラグインを使用すると、ファイル名をアップロード日時に変更できます。このプラグインを使用する場合、ファイル名に含まれる英語と数字の部分は保持されません。

メモ:


コメントを残す

コメント