В WordPress по умолчанию поддерживается загрузка множества типов файлов, однако в некоторых случаях необходимо ограничить возможность загрузки определённых типов файлов в медиабиблиотеку. Это важно для безопасности сайта и для упрощения управления контентом.
Почему важно ограничивать типы файлов при загрузке
Ограничение типов файлов помогает предотвратить загрузку вредоносных или неподходящих файлов, снижая риск взлома сайта. Кроме того, это упрощает работу редакторов, исключая возможность загрузки ненужных или неподдерживаемых форматов.
Например, если вы хотите разрешить загрузку только изображений и PDF, то запрет остальных типов файлов позволит избежать ошибок и повысить безопасность.
Как реализовать ограничение типов файлов с помощью фильтра mime_types
В WordPress есть фильтр upload_mimes, который позволяет изменять список разрешённых MIME типов. Рассмотрим пример, как ограничить загрузку только изображениями JPG, PNG и PDF.
function wpupload_restrict_mime_types($mimes) {
return array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'pdf' => 'application/pdf'
);
}
add_filter('upload_mimes', 'wpupload_restrict_mime_types');Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. После этого загрузить можно будет только файлы указанных типов.
Расширение списка разрешённых типов
Если нужно разрешить дополнительные форматы, просто добавьте их в массив. Например, для поддержки SVG:
function wpupload_restrict_mime_types($mimes) {
return array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'pdf' => 'application/pdf',
'svg' => 'image/svg+xml'
);
}Использование плагина для управления типами файлов
Если вы не хотите вносить изменения в код, можно воспользоваться плагином, например, WP Extra File Types. Он позволяет удобно через админку добавлять или удалять типы файлов, разрешённые для загрузки.
Но стоит помнить, что плагин меняет список глобально, и если необходимо ограничить загрузку только в определённых местах или для определённых ролей, лучше использовать код.
Как ограничить загрузку типов файлов для определённых ролей пользователей
Иногда нужно разрешить загрузку определённых типов файлов только администраторам, а для редакторов и авторов ограничить их список. Для этого можно расширить предыдущий пример следующим образом:
function wpupload_restrict_mime_types_by_role($mimes) {
if (current_user_can('administrator')) {
// Администраторы могут загружать любые типы
return $mimes;
} else {
// Остальные пользователи только jpg, png и pdf
return array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'pdf' => 'application/pdf'
);
}
}
add_filter('upload_mimes', 'wpupload_restrict_mime_types_by_role');Такой подход позволит гибко управлять разрешениями на загрузку по ролям.
Обработка ошибок при загрузке запрещённых типов файлов
Когда пользователь пытается загрузить файл с запрещённым типом, WordPress выведет стандартное сообщение об ошибке. Если хотите вывести своё, можно использовать фильтр wp_handle_upload_prefilter.
function wpupload_custom_upload_error($file) {
$allowed_types = array('image/jpeg', 'image/png', 'application/pdf');
if (!in_array($file['type'], $allowed_types)) {
$file['error'] = 'Ошибка: разрешена загрузка только JPG, PNG и PDF файлов.';
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpupload_custom_upload_error');Это улучшит пользовательский опыт, давая понятное сообщение об ограничениях.
Заключение
Ограничение типов файлов для загрузки в WordPress — эффективный способ повысить безопасность сайта и упростить управление медиафайлами. Используя фильтр upload_mimes, можно гибко настроить список разрешённых форматов как глобально, так и для отдельных ролей. Для удобства администрирования подойдет плагин WP Extra File Types, а для кастомизации пользовательских сообщений — фильтр wp_handle_upload_prefilter.
Если хотите подробнее изучить работу с загрузками в WordPress и расширить функционал, рекомендую ознакомиться с плагином WPUpload от WPShop, который предоставляет расширенные возможности работы с файлами.