В WordPress по умолчанию можно загружать файлы через медиабиблиотеку, но часто стандартных настроек бывает недостаточно. Например, нужно разрешить загрузку нестандартных форматов, ограничить размер файлов, проверить содержимое файлов на безопасность или создать кастомную обработку загрузки в своих плагинах и темах. В этой статье мы подробно разберем, как расширить и настроить обработку загрузки файлов в WordPress с помощью примеров кода и популярных плагинов.
Почему стандартная загрузка файлов WordPress часто не подходит
Стандартная загрузка файлов в WordPress поддерживает ограниченный набор форматов, таких как изображения, PDF, аудио и видео. При попытке загрузить, например, SVG или нестандартные типы документов, система выдаст ошибку. Также WordPress не фильтрует содержимое файлов, что может стать угрозой безопасности. Кроме того, для некоторых проектов важна дополнительная проверка размера, типа MIME и даже контента.
Для решения этих задач можно использовать плагины или писать собственные фильтры и хуки, которые работают на этапе загрузки и обработки файлов.
Как разрешить загрузку новых типов файлов в WordPress
Чтобы расширить перечень поддерживаемых форматов, можно воспользоваться фильтром upload_mimes. Ниже пример функции, которая добавляет поддержку формата SVG и JSON:
function premiumwp_add_custom_mime_types($mimes) {
$mimes['svg'] = 'image/svg+xml';
$mimes['json'] = 'application/json';
return $mimes;
}
add_filter('upload_mimes', 'premiumwp_add_custom_mime_types');
Этот код нужно добавить в файл functions.php вашей темы или в функциональный плагин. После этого WordPress позволит загружать файлы с расширениями .svg и .json.
Важно: формат SVG потенциально опасен, так как это XML с возможностью внедрения скриптов. Поэтому лучше дополнительно использовать плагины для очистки SVG, например Safe SVG.
Ограничение размера и проверка содержимого файлов
Ограничить размер можно как на уровне сервера (php.ini), так и через WordPress. Чтобы вывести ошибку, если файл превышает допустимый размер, можно использовать хук wp_handle_upload_prefilter:
function premiumwp_limit_file_size($file) {
$max_size = 2 * 1024 * 1024; // 2 Мб
if ($file['size'] > $max_size) {
$file['error'] = 'Файл слишком большой. Максимальный размер 2 Мб.';
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'premiumwp_limit_file_size');
Этот код проверит размер загружаемого файла и выдаст ошибку, если он превышает 2 Мб. Можно настроить не только размер, но и проверить тип MIME, размеры изображения и даже содержимое с помощью дополнительных функций.
Пример проверки изображения и его размеров
Иногда нужно разрешить загрузку только изображений с минимальными или максимальными параметрами ширины и высоты. Для этого можно добавить такую проверку:
function premiumwp_check_image_dimensions($file) {
$image_types = array('image/jpeg', 'image/png', 'image/gif');
if (in_array($file['type'], $image_types)) {
$image_info = getimagesize($file['tmp_name']);
if ($image_info) {
$width = $image_info[0];
$height = $image_info[1];
if ($width < 800 || $height < 600) {
$file['error'] = 'Изображение слишком маленькое. Минимум 800x600 px.';
}
}
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'premiumwp_check_image_dimensions');
Этот код не позволит загружать изображения с разрешением меньше 800x600 пикселей.
Плагины для расширенной обработки загрузки файлов
Если хочется получить расширенный функционал без ручного кодинга, можно использовать готовые плагины:
- WP Extra File Types — расширяет список допустимых форматов загрузки.
- Safe SVG — добавляет безопасную поддержку SVG с очисткой кода.
- File Upload Types by WPForms — позволяет добавить новые типы файлов и настроить ограничения.
- Media Library Assistant — мощный плагин для управления медиафайлами с дополнительными фильтрами и возможностями.
Эти плагины легко установить через админку WordPress и настроить в соответствии с требованиями проекта.
Создание кастомной обработки загрузки в собственном плагине или теме
Иногда нужна не просто загрузка, а выполнение дополнительных действий при загрузке файлов, например, автоматическое изменение формата, запись данных в отдельную таблицу или интеграция с внешними сервисами.
Для этого можно использовать хук add_attachment, который срабатывает после успешной загрузки файла в медиабиблиотеку:
function premiumwp_custom_after_upload($post_ID) {
$attachment = get_post($post_ID);
$mime_type = get_post_mime_type($post_ID);
// Пример: если загружен PDF, создаём копию с префиксом
if ($mime_type === 'application/pdf') {
$file_path = get_attached_file($post_ID);
$new_path = dirname($file_path) . '/copy_' . basename($file_path);
copy($file_path, $new_path);
}
}
add_action('add_attachment', 'premiumwp_custom_after_upload');
Этот пример показывает, как после загрузки PDF-файла автоматически создаётся его копия с префиксом copy_ в той же папке.
Обработка ошибок и логирование
Важно всегда обрабатывать ошибки и вести логирование при кастомной обработке файлов, чтобы быстро выявлять проблемы. Для логирования можно использовать функции WordPress error_log() или плагины для отладки (например, Query Monitor).
Резюме: как безопасно и эффективно настроить загрузку файлов в WordPress
Подводя итоги, для грамотной настройки загрузки и обработки файлов в WordPress нужно:
- Использовать фильтр
upload_mimesдля разрешения нужных форматов. - Применять
wp_handle_upload_prefilterдля проверки размера и содержимого файлов. - Обеспечить безопасность, например, для SVG использовать очистку кода.
- Использовать хук
add_attachmentдля кастомных действий после загрузки. - При необходимости использовать проверенные плагины с расширенными возможностями.
Такой подход поможет вам гибко настроить загрузку файлов под нужды любого проекта на WordPress и обеспечит безопасность и удобство работы с медиа.