Как изменить папку загрузки WordPress Разработка

Если посмотреть, как в WordPress организовано хранение всех изображений, которые загружаются для постов и страниц, то вы увидите, что все изображения собраны в папки по годам и месяцам. Это стандартная настройка.

Да, конечно, Вы можете изменить порядок загрузки таких изображений в разделе ПараметрыМедиафайлы сняв галочку у параметра «Помещать загруженные мной файлы в папки по месяцу и году».

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

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

Итак, чтобы система определяла тип файла и помещала его в определенную папку Вам необходимо добавить следующий код в файл `functions.php` вашей активной темы WordPress.


function handle_upload_prefilter($file)
{
    add_filter('upload_dir', function ($path) use ($file) {

		$use_default_dir = (isset($_REQUEST['post_id']) && $_REQUEST['post_id'] == 0) ? true : false;
		if(!empty( $path['error']) || $use_default_dir)
			return $path;

		$extension = substr(strrchr($file["name"], '.'), 1);
		switch(strtolower($extension))
		{
			case 'pdf':
			case 'doc':
			case 'docx':
			case 'xls':
			case 'xlsx':
			case 'csv':
			case 'txt':
				$customdir = '/documents';
				break;
			
			case 'mp3':
			case 'm4v':
			case 'oga':
				$customdir = '/music';
				break;
			
			case 'mp4':
			case 'ogv':
			case 'webm':
			case 'mov':
			case 'avi':
			case 'mkv':
				$customdir = '/video';
				break;
			
			default:
				return $path;
				break;
		}
		$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;

	});
	
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'handle_upload_prefilter');

function handle_upload($fileinfo)
{
    remove_filter('upload_dir', 'custom_upload_dir');
    return $fileinfo;
}
add_filter('wp_handle_upload', 'handle_upload');

Где, в блоке `switch` мы разбираем, какое окончание после точки (расширение) было у файла при его загрузке и в зависимости от совпадений с параметром секции `case` - помещаем его в конкретную папку, название которой и определяем в `$customdir`.

В случае, если расширение загружаемого файла не совпало ни с одним из приведённых в коде, будет отработана секция `default`, которая вернет стандартный путь для сохранения файла настроенный в WordPress.

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


function allow_mime_types($mime_types){
    $mime_types['pdf'] = 'application/pdf';
    return $mime_types;
}
add_filter('upload_mimes', 'allow_mime_types', 1, 1);

Таблицу популярных типов файлов Вы можете найти здесь.

Свяжитесь с нами если у Вас возникли вопросы
или позвоните:
+38 (050) 471-21-14
Vodafone, Украина