Переименовывать файлы во время загрузки с помощью переменных


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

Другими словами, если я загружаю/прикрепляю изображения к сообщению, на странице которого есть "тестовая страница", я бы хотел, чтобы изображения были переименованы на лету в test-page-slug-[C].[extension]:

  • test-page-slug-1.jpg
  • test-page-slug-2.jpg
  • и т.д., Не имеет значения, какими были исходные имена файлов.

Есть этот плагин, Пользовательский каталог загрузки:

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

Как я могу сделать то же самое с именами файлов?

Author: brasofilo, 2010-12-16

1 answers

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

function wpsx_5505_modify_uploaded_file_names($arr) {

    // Get the parent post ID, if there is one
    if( isset($_REQUEST['post_id']) ) {
        $post_id = $_REQUEST['post_id'];
    } else {
        $post_id = false;
    }

    // Only do this if we got the post ID--otherwise they're probably in
    //  the media section rather than uploading an image from a post.
    if($post_id && is_numeric($post_id)) {

        // Get the post slug
        $post_obj = get_post($post_id); 
        $post_slug = $post_obj->post_name;

        // If we found a slug
        if($post_slug) {

            $random_number = rand(10000,99999);
            $arr['name'] = $post_slug . '-' . $random_number . '.jpg';

        }

    }

    return $arr;

}
add_filter('wp_handle_upload_prefilter', 'wpsx_5505_modify_uploaded_file_names', 1, 1);

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

РЕДАКТИРОВАТЬ

Как указано в комментарии, эта дополнительная функция изменяет некоторые мета-атрибуты загруженного изображения. Однако, похоже, это не позволяет вам устанавливать альтернативный текст, и по какой-то причине значение, которое вы установили в качестве "подписи", фактически назначается в качестве описания. Тебе придется повозиться с этим. Я нашел этот фильтр в функции wp_read_image_metadata(), которая находится в wp-admin/includes/image.php . Это то, что загружают СМИ и функции wp_generate_attachment_metadata полагаются на получение метаданных из изображения. Вы можете взглянуть туда, если хотите получить больше информации.

function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) {

    // Get the parent post ID, if there is one
    if( isset($_REQUEST['post_id']) ) {
        $post_id = $_REQUEST['post_id'];
    } else {
        $post_id = false;
    }

    // Only do this if we got the post ID--otherwise they're probably in
    //  the media section rather than uploading an image from a post.
    if($post_id && is_numeric($post_id)) {

        // Get the post title
        $post_title = get_the_title($post_id);

        // If we found a title
        if($post_title) {

            $meta['title'] = $post_title;
            $meta['caption'] = $post_title;

        }

    }

    return $meta;

}
add_filter('wp_read_image_metadata', 'wpsx_5505_modify_uploaded_file_meta', 1, 3);

Отредактировано 04/04/2012, чтобы извлечь идентификатор записи из объекта ЗАПРОСА, а не проверять ПОЛУЧЕНИЕ и публикацию последовательно. На основе предложений в комментариях.

 9
Author: MathSmath, 2012-04-04 17:21:31