Переименование файлов во время загрузки в бэкэнде Wordpress
Есть ли способ переименовать файлы во время выполнения загрузки в бэкэнде Wordpress 3.0
? Я хотел бы иметь последовательное именование файлов, особенно для изображений.
Я думаю, что хэш-значение 12 (+ -) цифр исходного имени файла или что-то подобное было бы удивительным. Любые предложения?
Привет
Ответы
Ответ 1
Но было бы проще сделать это перед загрузкой файлов.
Не совсем уверен в этом - это кажется довольно простым;
/**
* @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()
, если хотите.
Этот фильтр запускается после того, как файл был загружен во временную папку на вашем сервере, но до того, как он будет изменен (если применимо) и сохранен в вашей папке uploads.
Обратите внимание, что нет риска перезаписать файл - в случае, если новый хэшированный файл совпадает с тем, который уже существует, WordPress попытается добавить добавочную цифру к имени файла, пока не будет больше конфликта.
Плагин 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 );
Ответ 2
Я сделал для него плагин. Я сделал это, потому что у меня были слишком большие проблемы с моими клиентами, которые пытались загрузить изображения со специальными символами.
http://wordpress.org/plugins/file-renaming-on-upload
Ответ 3
Я действительно искал плагин, который мог бы сделать это правильно, и, наконец, я сам это сделал. Это доступно в моем блоге: http://www.meow.fr/media-file-renamer! Если вы используете его, пожалуйста, дайте мне отзыв:) Я искренне надеюсь, что это поможет!
Ответ 4
Я реализовал то же самое, я хотел получить более случайное имя файла, чем оригинал, поскольку сайт, для которого я использую это, предназначен только для фото, и все файлы находятся в одном каталоге.
я сделал следующее
return md5($ip . uniqid(mt_rand(), true)) . $ext;
Ответ 5
http://wpapi.com/change-image-name-to-wordpress-post-slug-during-upload/
BTW:
Добавить фильтр в sanitize_file_name
абсолютно неверен, поскольку функция sanitize_file_name()
является вспомогательной функцией для форматирования строки, ее можно использовать в другом месте, например, плагины или темы.
function wp_modify_uploaded_file_names($file) {
$info = pathinfo($file['name']);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$name = basename($file['name'], $ext);
$file['name'] = uniqid() . $ext; // uniqid method
// $file['name'] = md5($name) . $ext; // md5 method
// $file['name'] = base64_encode($name) . $ext; // base64 method
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wp_modify_uploaded_file_names', 1, 1);
Ответ 6
Вы не можете автозарегистрировать файл с помощью функции медиабиблиотеки. Я бы рекомендовал переименовать файлы перед их загрузкой. Даже после загрузки файла вы не можете переименовать его в WordPress, но только через FTP.
Единственный способ сделать это - это плагин, который подключается к процессу загрузки медиабиблиотеки. Но было бы проще сделать это перед загрузкой файлов.