WordPress как на ладони
eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Разделение миниатюры и оригинала изображения в разные папки

При сохранении медиа файлов, можно изменить папку для их сохранения.

А как можно разделить сохранение миниатюр в одну папку - "mini" и оригинал в папку - "orig"?

Так же интересует возможность сохранения изображения на поддомен, в такие же папки - "mini" и "orig".

0
Сергей
3.4 года назад
  • 1

    Отделить миниатюры от оригинала в специальную папку можно расширив класс 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;
    }
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация