Переименование файлов во время загрузки в бэкэнд Wordpress - PullRequest
12 голосов
/ 16 июля 2010

есть ли способ переименовать файлы во время процесса загрузки внутри Wordpress 3.0 бэкэнда? Я хотел бы иметь последовательное именование файлов, особенно для изображений.

Я думаю, что 12 (+ -) хэш-значение исходного имени файла или что-то подобное было бы здорово. Есть предложения?

Привет

Ответы [ 6 ]

28 голосов
/ 16 июля 2010

Но было бы действительно легче сделать это перед загрузкой файлов.

Не совсем уверен в этом - это кажется довольно простым;

/**
 * @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 будет пытаться добавить увеличивающуюся цифру к имени файла до тех пор, покабольше не является столкновением.

Плагин 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 );
4 голосов
/ 27 марта 2014

Я сделал плагин для него. Я сделал это, потому что у меня было слишком много проблем с моими клиентами, пытающимися загрузить изображения со специальными символами

http://wordpress.org/plugins/file-renaming-on-upload

3 голосов
/ 13 февраля 2011

Я реализовал то же самое, я хотел более случайное имя файла, чем оригинал, так как сайт, для которого я использую это, предназначен только для фото, и все файлы находятся в одном каталоге.

я сделал следующее

return md5($ip . uniqid(mt_rand(), true)) . $ext;
2 голосов
/ 23 декабря 2015

http://wpapi.com/change-image-name-to-wordpress-post-slug-during-upload/

КСТАТИ:

Добавить фильтр к 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);
2 голосов
/ 26 января 2011

Я действительно искал плагин, который мог бы сделать это должным образом, и в конце концов я сделал это сам. Это доступно в моем блоге: http://www.meow.fr/media-file-renamer! Если вы используете его, пожалуйста, дайте мне отзыв :) Я искренне надеюсь, что это поможет!

0 голосов
/ 16 июля 2010

Невозможно автоматически переименовать файл с помощью функции библиотеки мультимедиа.Я бы порекомендовал переименовать файлы, прежде чем загружать их.Даже после загрузки файла вы не можете переименовать его через WordPress, но только через FTP.

Единственный способ сделать это - это подключаемый модуль, который подключается к процессу загрузки медиатек.Но было бы проще сделать это перед загрузкой файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...