Wordpress 3.0
バックエンド内でアップロードの進行中にファイルの名前を変更する方法はありますか? 特に画像の場合、ファイルの名前に一貫性を持たせたいと考えています。
元のファイル名の 12 (+-) 桁のハッシュ値またはそれに類似したものはすばらしいと思います。助言がありますか?
よろしく
Wordpress 3.0
バックエンド内でアップロードの進行中にファイルの名前を変更する方法はありますか? 特に画像の場合、ファイルの名前に一貫性を持たせたいと考えています。
元のファイル名の 12 (+-) 桁のハッシュ値またはそれに類似したものはすばらしいと思います。助言がありますか?
よろしく
しかし、ファイルをアップロードする前にそれを行う方が本当に簡単です。
それについてはよくわかりません-これはかなり簡単に思えます。
/**
* @link http://stackoverflow.com/a/3261107/247223
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
このフィルターは、元のファイル名の 32 文字のハッシュを作成し、ファイル拡張子を保持します。必要に応じて、少し切り刻むことができsubstr()
ます。
このフィルターは、ファイルがサーバー上の一時ディレクトリにアップロードされると実行されますが、サイズが変更され (該当する場合)、アップロード フォルダーに保存される前に実行されます。
ファイルが上書きされるリスクはないことに注意してください - 新しくハッシュされたファイルが既に存在するファイルと同じである場合、WordPress は衝突がなくなるまでファイル名に増分数字を追加しようとします。
<?php
/**
* Plugin Name: Hash Upload Filename
* Plugin URI: http://stackoverflow.com/questions/3259696
* Description: Rename uploaded files as the hash of their original.
* Version: 0.1
*/
/**
* Filter {@see sanitize_file_name()} and return an MD5 hash.
*
* @param string $filename
* @return string
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
そのためのプラグインを作りました。クライアントが特殊文字を含む画像をアップロードしようとするのに苦労していたので、それを行いました
これを使用しているサイトは写真専用で、すべてのファイルが1つのディレクトリにあるため、元のファイル名よりもランダムなファイル名が必要でした。
私は次のことをしました
md5($ip . uniqid(mt_rand(), true)) を返します。$ext;
ちゃんとできるプラグインをずっと探していたのですが、結局これを自作するに至りました。私のブログで入手できます: http://www.meow.fr/media-file-renamer ! 使用する場合は、フィードバックをお寄せください :) お役に立てば幸いです。
メディア ライブラリ機能でファイル名を自動変更することはできません。ファイルをアップロードする前に、ファイルの名前を変更することをお勧めします。ファイルをアップロードした後でも、WordPress を介して名前を変更することはできず、FTP を介してのみ名前を変更できます。
これを行う唯一の方法は、メディア ライブラリのアップロード プロセスにプラグイン自体をフックすることです。しかし、ファイルをアップロードする前にそれを行う方が本当に簡単です。