Разделение миниатюры и оригинала изображения в разные папки
При сохранении медиа файлов, можно изменить папку для их сохранения.
А как можно разделить сохранение миниатюр в одну папку - "mini" и оригинал в папку - "orig"?
Так же интересует возможность сохранения изображения на поддомен, в такие же папки - "mini" и "orig".
Отделить миниатюры от оригинала в специальную папку можно расширив класс WP_Image_Editor, заменив стандартные методы multi_resize() и/или generate_filename() на свои собственные.
Вот код плагина, который делает именно это: https://github.com/IORoot/wp-plugin__thumbnail-folders/blob/master/thumbnail_folders.php (В нем изменены оба подкласса, которые в WP отвечают за работу с изображением - один с использованием GD Library и второй с использованием ImageMagick, поэтому код длинный и повторяющийся).
Здесь метод multi_size() добавляет папку по имени зарегистрированного размера, а generate_filename() изменяет имя файла, удаляя "размерный суффикс" и делая на его основе папку.
Обратите внимание, что эти функции работают только при создании экземпляров изображения.
Изменить папку загрузки для изображений можно, отфильтровав путь во время загрузки.
add_filter('wp_handle_upload_prefilter', 'upload_prefilter'); add_filter('wp_handle_upload', 'handle_upload'); function upload_prefilter( $file ) { add_filter('upload_dir', 'custom_upload_dir'); return $file; } function handle_upload( $fileinfo ){ remove_filter('upload_dir', 'custom_upload_dir'); return $fileinfo; } function custom_upload_dir($path) { if( !empty( $path['error'] ) ) return $path; $ext = substr( strrchr( $_POST['name'], '.' ), 1 ); if (in_array ($ext, ['jpg', 'gif', 'png',])) { $customdir = "/original"; } $path['path'] = str_replace($path['subdir'], '', $path['path']); $path['url'] = str_replace($path['subdir'], '', $path['url']); $path['subdir'] = $customdir; $path['path'] .= $customdir; $path['url'] .= $customdir; return $path; }