Как автоматически отклонять загрузку файлов по типам в WordPress

Диагностика проблемы: почему нужно ограничивать типы загружаемых файлов

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

Если вы хотите ограничить загрузку файлов только безопасными и необходимыми типами (например, только изображения и PDF), стоит реализовать автоматическую проверку с отклонением неподходящих.

Как проверить текущие разрешённые типы файлов в WordPress

Для начала посмотрите список MIME-типов, разрешённых на вашем сайте. Это можно сделать через консоль WP-CLI или добавив временный код:

add_action('admin_init', function() {
    echo '<pre>';
    print_r(get_allowed_mime_types());
    echo '</pre>';
});

Зайдите в админку и обновите страницу — увидите массив с разрешёнными типами. Это поможет понять, что именно стоит ограничить.

Пошаговое решение: фильтрация типов файлов через хук upload_mimes

WordPress предоставляет фильтр upload_mimes, с помощью которого можно изменить список разрешённых MIME-типов.

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

function custom_restrict_upload_mimes($mimes) {
    // Разрешённые типы файлов
    $allowed = [
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png' => 'image/png',
        'gif' => 'image/gif',
        'pdf' => 'application/pdf'
    ];
    return $allowed;
}
add_filter('upload_mimes', 'custom_restrict_upload_mimes');

Этот код полностью заменит список разрешённых типов на указанные четыре — JPEG, PNG, GIF и PDF. Остальные файлы будут отклоняться при попытке загрузки.

Как добавить исключения для администратора

Если нужно, чтобы администраторы могли загружать любые файлы, добавьте условие:

function custom_restrict_upload_mimes($mimes) {
    if (current_user_can('administrator')) {
        return $mimes; // Администраторы без ограничений
    }
    $allowed = [
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png' => 'image/png',
        'gif' => 'image/gif',
        'pdf' => 'application/pdf'
    ];
    return $allowed;
}
add_filter('upload_mimes', 'custom_restrict_upload_mimes');

Проверка результата после внедрения

  • Попробуйте загрузить файл с разрешённым типом — например, PNG или PDF — через медиабиблиотеку. Загрузка должна пройти успешно.
  • Попытайтесь загрузить запрещённый тип — например, SVG, DOCX или PHP-файл. WordPress должен выдать ошибку "Извините, этот тип файла запрещён".
  • Проверьте в разных ролях пользователя (админ/редактор/подписчик), если применялись исключения.

Частые ошибки и как их исправить

  • Ошибка: "Ошибка загрузки файла" без пояснений.
    Проверьте, что MIME-типы в массиве совпадают с форматом файла. Иногда браузер или сервер могут передавать другой MIME. Используйте расширение файла для фильтрации.
  • SVG загружается, хотя не должен.
    SVG по умолчанию запрещён, но если плагин разрешает SVG, отключите его или дополнительно фильтруйте SVG в своём коде.
  • Администратор тоже не может загружать файлы.
    Проверьте условие для current_user_can('administrator'). Возможно, роль пользователя не соответствует или код подключён с ошибкой.
  • Кэширование мешает изменениям.
    Очистите кэш сайта и браузера после внесения изменений.

Практические советы по безопасности и производительности

  • Не разрешайте загрузку исполняемых файлов (php, exe, js) без веских причин.
  • Ограничивайте максимальный размер загружаемых файлов через настройки PHP (upload_max_filesize) и WordPress (фильтр upload_size_limit).
  • Используйте плагин безопасности для сканирования загружаемых файлов на вирусы.
  • Регулярно обновляйте WordPress и плагины, чтобы исключить уязвимости.

Сравнение способов ограничения типов файлов

СпособПлюсыМинусыПример
Фильтр upload_mimesГибко и просто, работает на уровне ядраТребует кода, нельзя настроить через админкуКод из статьи
Плагины типа WP Add Mime TypesУдобный UI, быстро изменитьДополнительный плагин, возможна перегрузкаWP Add Mime Types
Изменение через wp-config.php или серверКонтроль на уровне сервераСложно, влияет на все сайты на сервереphp.ini upload_max_filesize
Как добавить проверку вирусов при загрузке файлов в WordPress
26.03.2026
Автоматическое удаление товаров в WooCommerce по сроку хранения
23.04.2026
Автоматическое удаление файлов WooCommerce после отмены заказа без плагинов
09.06.2026
Как использовать фильтры для изменения путей загрузки файлов в WordPress
06.04.2026
Как добавить автоматическое сжатие файлов при загрузке в WordPress
12.02.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.