wpcorp.ru wordpress WP Corp

WooCommerce: установка ограничений на загрузку файлов для цифровых товаров

Диагностика проблемы с загрузкой файлов в WooCommerce

При продаже цифровых товаров через WooCommerce часто возникает необходимость ограничить типы или размер загружаемых файлов, чтобы предотвратить загрузку неподходящих или слишком больших файлов покупателями. Это важно для сохранения безопасности сайта и оптимизации хранилища.

Проверить, что ограничения на загрузку не работают, можно по следующим признакам:

  • Покупатели могут загрузить файлы любого типа, даже те, которые не должны быть разрешены.
  • Отсутствуют ошибки при загрузке больших файлов, превышающих допустимый размер.
  • В настройках WooCommerce нет штатных опций для ограничения загрузок.

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

1. Ограничение типов файлов

WooCommerce не имеет встроенной настройки для ограничения типов загружаемых файлов при покупке цифровых товаров. Для этого нужно добавить фильтр, который проверит MIME-тип файла при загрузке и отклонит неподходящие.

Пример кода для functions.php темы или плагина:

add_filter('woocommerce_file_download_mimes', 'custom_allowed_file_types');
function custom_allowed_file_types($mimes) {
    // Разрешённые типы файлов для загрузки
    $mimes = array(
        'pdf' => 'application/pdf',
        'zip' => 'application/zip',
        'jpg' => 'image/jpeg',
        'png' => 'image/png'
    );
    return $mimes;
}

Этот фильтр ограничит типы файлов, которые можно прикреплять к цифровому товару и загружать покупателям.

2. Ограничение размера файла

Чтобы ограничить размер загружаемых файлов, нужно проверить размер файла в момент загрузки с помощью AJAX или на сервере. WooCommerce не предоставляет стандартный хук для этого, поэтому используем хук woocommerce_process_product_file_upload для проверки.

add_action('woocommerce_process_product_file_upload', 'limit_uploaded_file_size', 10, 2);
function limit_uploaded_file_size($file, $file_key) {
    $max_size = 5 * 1024 * 1024; // 5 Мб в байтах
    if ($file['size'] > $max_size) {
        wp_die('Ошибка: размер файла превышает допустимый лимит 5 Мб.');
    }
}
<

Этот код остановит загрузку файла, если он превышает 5 Мб, с выводом сообщения об ошибке.

3. Валидация на стороне клиента (дополнительно)

Для улучшения UX можно добавить проверку размера и типа файла на стороне клиента с помощью JavaScript, чтобы пользователи сразу видели ошибки до отправки формы.

document.getElementById('upload_file_input').addEventListener('change', function() {
    const file = this.files[0];
    const allowedTypes = ['application/pdf', 'application/zip', 'image/jpeg', 'image/png'];
    const maxSize = 5 * 1024 * 1024; // 5 Мб

    if (!allowedTypes.includes(file.type)) {
        alert('Недопустимый тип файла');
        this.value = '';
    } else if (file.size > maxSize) {
        alert('Файл слишком большой, максимальный размер 5 Мб');
        this.value = '';
    }
});

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

Чтобы убедиться в правильной работе ограничений, сделайте следующее:

  1. Создайте или отредактируйте цифровой товар в WooCommerce, прикрепите файл разрешённого типа и размера — загрузка должна пройти успешно.
  2. Попробуйте загрузить файл неподдерживаемого типа или больше допустимого размера — должна появиться ошибка и загрузка будет запрещена.
  3. Проверьте функциональность как с административной панели, так и с фронтенда (если предусмотрена загрузка файлов покупателями).
  4. Для проверки клиентской валидации откройте консоль браузера и попробуйте загрузить файл, выходящий за рамки ограничений.

Частые ошибки при настройке ограничений на загрузку в WooCommerce

  • Ошибка в MIME-типах: неправильное указание MIME-типов в массиве $mimes приведёт к тому, что файлы не будут загружаться. Всегда проверяйте точные MIME-значения.
  • Отсутствие проверки на сервере: клиентская валидация легко обходится, поэтому серверная проверка обязательна.
  • Конфликты с другими плагинами для загрузки файлов: отключайте сторонние плагины при тестировании.
  • Неправильный хук для проверки размера: некоторые хуки не срабатывают при загрузке файлов цифровых товаров — используйте woocommerce_process_product_file_upload.

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

  • Всегда проверяйте и фильтруйте типы и размеры загружаемых файлов на сервере.
  • Используйте .htaccess или аналогичные настройки сервера для запрета выполнения скриптов из папок с загруженными файлами.
  • Ограничьте максимальный размер загружаемых файлов через PHP (параметры upload_max_filesize и post_max_size) и дополнительно в коде.
  • Регулярно проверяйте папки с загруженными файлами на наличие потенциально опасных файлов.
  • Для хранения цифровых товаров используйте защищённые каталоги, недоступные напрямую по URL.

Сравнение вариантов реализации ограничений

МетодПлюсыМинусы
Фильтр woocommerce_file_download_mimesЛегко реализуется, контролирует типы файловНе контролирует размер файлов
Хук woocommerce_process_product_file_uploadКонтролирует размер и типы на сервереТребует кастомного кода, возможны конфликты
Проверка на клиенте (JS)Улучшает UX, мгновенная обратная связьЛегко обходится, нужна серверная проверка
Плагины сторонних разработчиковГотовые решения с интерфейсомМогут нагружать сайт, конфликтовать
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙