Как автоматически переименовать имя файла в значение имени пользователя для загруженных изображений пользователей в WordPress — плагин Ultimate Memeber

При использовании плагина Ultimate Member в WordPress я столкнулся с одной сложной для меня проблемой. Мне нужно, чтобы загруженное изображение пользователя в его профиле превратилось в ссылку типа: http://example.com/img/%username%.png Путь к %username%.png не важен (главное, чтобы он не менялся), но я хотел, чтобы загруженное изображение пользователя имело подходящее имя значение имени пользователя. Подскажите как это можно реализовать, я новичок в PHP и все знаю очень поверхностно.

На данный момент ссылка выглядит так: https://example.com/um-download/6287/img/6/93059f79c9?t=1694944149 Единственное, за что я мог зацепиться, это то, что буква 6 — это идентификатор пользователя.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Решением моей проблемы стал буквально единственный условно-бесплатный file-renaming-on-upload план с таким функционалом. В нем можно автоматизировать переименование файлов в зависимости от {порта} {имя пользователя} {дата} и так далее. https://wordpress.org/plugins/file-renaming-on-upload/

Вы можете использовать следующий код, чтобы изменить имя файла stream_photo, используя поле «Загрузчик» формы Ultimate Member. Это изменит имя файла на значение user_login текущего вошедшего в систему пользователя, когда вы загружаете с полем загрузчика, имеющим мета-ключ second_profile_photo:

add_filter( 'um_image_upload_handler_overrides__second_profile_photo', function( $uploader_overrides ) {
if ( 'stream_photo' ===  UM()->uploader()->upload_image_type) {
    $uploader_overrides['unique_filename_callback'] = function ( $dir, $filename, $ext ) {
        if ( empty( $ext ) ) {
            $image_type = wp_check_filetype( $filename );
            $ext = strtolower( trim( $image_type['ext'], ' /.' ) );
        } else {
            $ext = strtolower( trim( $ext, ' /.' ) );
        }
    
        if ( 'image' == UM()->uploader()->upload_type ) {
            $filename = um_user('user_login') . ".{$ext}";
        }
    
       UM()->uploader()->delete_existing_file( $filename, $ext, $dir );
    
        return $filename;
    };
}
return $uploader_overrides;

});

Это не изменит URL-адрес загрузки, отображаемый в представлении профиля, но позволит вам создать загруженную фотографию с нужным именем файла.

Дальнейшее объяснение кода:

UM()->uploader()->upload_image_type проверяет, является ли текущий загружаемый файл stream_photo.

У Ultimate Member есть 4 типа загрузки: profile_photo, cover_photo, stream_photo и file. В вашем случае вам нужен только stream_photo.

Это та часть, которая переименовывает имя файла со значением user_login текущего вошедшего в систему пользователя:

if ( 'image' == UM()->uploader()->upload_type ) {
  $filename = um_user('user_login') . ".{$ext}";
}

Другие вопросы по теме