При использовании плагина Ultimate Member в WordPress я столкнулся с одной сложной для меня проблемой. Мне нужно, чтобы загруженное изображение пользователя в его профиле превратилось в ссылку типа: http://example.com/img/%username%.png Путь к %username%.png не важен (главное, чтобы он не менялся), но я хотел, чтобы загруженное изображение пользователя имело подходящее имя значение имени пользователя. Подскажите как это можно реализовать, я новичок в PHP и все знаю очень поверхностно.
На данный момент ссылка выглядит так:
https://example.com/um-download/6287/img/6/93059f79c9?t=1694944149
Единственное, за что я мог зацепиться, это то, что буква 6 — это идентификатор пользователя.






Решением моей проблемы стал буквально единственный условно-бесплатный 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}";
}