wpcorp.ru wordpress WP Corp

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

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

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

  • Покупатели загружают нежелательные типы файлов, что приводит к ошибкам при скачивании или загрузке.
  • Слишком большие файлы вызывают превышение лимитов PHP и ошибки загрузки.
  • Невозможно ограничить количество загрузок для одного заказа.

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

1. Ограничение типов файлов для цифровых товаров

WooCommerce по умолчанию позволяет загружать любые файлы. Чтобы ограничить типы, используйте фильтр woocommerce_file_download_mimes. Например, разрешим только PDF, ZIP и JPG:

add_filter('woocommerce_file_download_mimes', function($mimes) {
    return [
        'pdf' => 'application/pdf',
        'zip' => 'application/zip',
        'jpg' => 'image/jpeg',
        'jpeg' => 'image/jpeg'
    ];
});

2. Ограничение размера загружаемых файлов

Контроль размера файлов на стороне сервера осуществляется через настройки PHP (upload_max_filesize и post_max_size). Чтобы установить ограничение именно для WooCommerce, можно отловить загрузку с помощью хука woocommerce_process_product_file_download или в обработчике формы загрузки (если используется кастомная).

Пример проверки в AJAX-обработчике загрузки:

function custom_check_file_size($file) {
    $max_size = 5 * 1024 * 1024; // 5 МБ
    if ($file['size'] > $max_size) {
        wp_die('Ошибка: размер файла превышает 5 МБ');
    }
}
add_action('wp_ajax_custom_file_upload', 'custom_check_file_size');

3. Ограничение количества загрузок для товара

В настройках цифровых товаров WooCommerce есть параметр "максимальное количество загрузок". Если нужно динамически менять это значение, используйте фильтр woocommerce_file_download_limit:

add_filter('woocommerce_file_download_limit', function($limit, $product) {
    if ($product->get_id() == 123) { // ID конкретного товара
        return 3; // ограничить до 3 загрузок
    }
    return $limit;
}, 10, 2);

Пошаговое решение: внедрение ограничений для цифрового товара

  1. Добавьте фильтр разрешённых MIME-типов в functions.php вашей темы или в плагин.
  2. Проверьте и при необходимости уменьшите значения upload_max_filesize и post_max_size в php.ini или через .htaccess.
  3. Реализуйте проверку размера файла при загрузке (если загрузка происходит через форму на фронтенде) с помощью AJAX или стандартных хуков WooCommerce.
  4. Настройте максимальное количество загрузок товара в админке WooCommerce или через фильтр для динамических ограничений.

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

  • Попробуйте загрузить файл неподдерживаемого типа — загрузка должна быть запрещена с ошибкой.
  • Попробуйте загрузить файл превышающий 5 МБ — загрузка отклонится.
  • Сделайте несколько загрузок цифрового товара — после достижения лимита загрузки должны быть заблокированы.
  • Проверьте через phpinfo(), что ограничения PHP соответствуют установленным.

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

  • Игнорирование PHP-ограничений. Даже если в WooCommerce стоит лимит, PHP может блокировать большие файлы. Нужно синхронизировать настройки.
  • Неправильные MIME-типы. Забывают добавить все разрешённые расширения, например, jpeg и jpg, что вызывает ошибки.
  • Отсутствие проверки на стороне клиента. Без JS-валидации пользователи пытаются загружать запрещённые файлы, вызывая лишние обращения к серверу.
  • Конфликт с плагинами безопасности. Некоторые плагины могут блокировать загрузки, если не настроены корректно.

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

  • Используйте белый список MIME-типов, а не черный.
  • Проверяйте расширения и MIME-тип файла на сервере, а не только на клиенте.
  • Ограничивайте размеры файлов не только в WooCommerce, но и в PHP и веб-сервере.
  • Для больших файлов используйте CDN или специальные сервисы хранения.
  • Регулярно обновляйте WooCommerce и плагины для защиты от уязвимостей в механизмах загрузки.

Сравнение способов установки ограничений

МетодПлюсыМинусыПример
Фильтр woocommerce_file_download_mimesПростота и надежностьНе ограничивает размер и количествоКод из раздела 1
PHP-настройки (php.ini)Глобальная защита, работает на уровне сервераМенее гибко, влияет на все загрузкиupload_max_filesize=5M
Обработка загрузки через AJAXГибкие проверки, можно добавить кастомные сообщенияТребует дополнительной разработкиКод из раздела 2
Параметр максимальных загрузок WooCommerceСтандартный функционал, не требует кодаСтатичное значение, не подходит для динамических условийНастройки товара в админке
×
Оптимизируй свой сайт!

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

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