Скачиваемые товары в WooCommerce подходят для продажи PDF, электронных книг, архивов, пресетов, шаблонов, программ, прошивок, аудио, видео и других цифровых материалов. Встроенный механизм умеет хранить ссылки на файлы, выдавать покупателю права после оплаты, ограничивать число загрузок и задавать срок действия доступа.
Главный вопрос здесь не только в том, как добавить файл в карточку товара. Важно, как именно WooCommerce отдаёт файл покупателю, где он хранится и можно ли обойти проверку заказа, просто получив прямой URL. От выбора метода скачивания зависит и безопасность, и нагрузка на сервер.
Что делает товар скачиваемым
Для простого товара в WooCommerce достаточно включить опцию Downloadable. После этого появляются три основных настройки: список downloadable files, лимит загрузок и срок действия доступа. Лимит можно оставить пустым для неограниченного числа скачиваний, а expiry — пустым для бессрочного доступа.
Опция Virtual решает другую задачу. Она говорит WooCommerce, что физическая доставка товару не нужна. Цифровой товар может быть downloadable, но не virtual — например, если вместе с физическим устройством покупателю выдаётся электронная инструкция. Если товар одновременно virtual и downloadable, заказ из таких товаров обычно может сразу перейти в Completed после оплаты.
Три метода выдачи файлов в WooCommerce
В разделе WooCommerce → Settings → Products → Downloadable products выбирается File download method. На практике это одна из важнейших настроек для магазина цифровых товаров.
Force Downloads
В режиме Force Downloads запрос проходит через PHP. Покупателю не показывается прямой путь к защищённому файлу, а WooCommerce проверяет право на скачивание перед выдачей. Это простой вариант для небольших файлов и умеренной нагрузки.
Минус — большие файлы проходят через PHP-процесс. На слабом сервере или при одновременной загрузке крупных архивов это может увеличить расход памяти и время выполнения. Официальная документация отдельно предупреждает о возможных timeout для больших файлов.
X-Accel-Redirect / X-Sendfile
Для Nginx и Apache более производительным вариантом может быть X-Accel-Redirect/X-Sendfile. Проверка права доступа остаётся на стороне приложения, но сам файл после авторизации отдаёт веб-сервер. Это позволяет не прогонять каждый мегабайт через PHP.
Для Nginx обычно используется X-Accel-Redirect, для Apache — X-Sendfile. Метод требует поддержки и корректной конфигурации сервера, поэтому просто включить пункт в WooCommerce недостаточно. Нужно проверить модуль, закрытый путь хранения и реальную выдачу тестового файла.
Redirect only
Redirect only перенаправляет покупателя прямо на URL файла. WooCommerce помечает этот способ как небезопасный: человек, получивший прямую ссылку, может передать её другому пользователю. Для платных закрытых файлов такой режим обычно не подходит.
Иногда redirect используют для внешнего хранилища, которое не поддерживает защищённую серверную выдачу. Тогда контроль доступа лучше переносить на само хранилище — например, использовать краткоживущие подписанные URL вместо постоянной публичной ссылки.
Почему Media Library — не защищённое хранилище
Обычная WordPress Media Library рассчитана на публичные файлы страниц и записей. Если загрузить платный PDF в стандартную медиатеку, его URL обычно можно открыть напрямую без проверки заказа.
WooCommerce рекомендует загружать защищаемые файлы из интерфейса downloadable product. В этом случае файлы могут размещаться в woocommerce_uploads, который предназначен для закрытых загрузок. Для цифрового магазина это принципиальная разница: наличие записи о permission в WooCommerce не делает публичный URL из Media Library автоматически приватным.
Approved Download Directories
WooCommerce поддерживает Approved Download Directories — список разрешённых мест, откуда можно привязывать файлы к скачиваемым товарам. Эта функция особенно полезна, когда товары редактируют не только администраторы, но и shop managers, контент-менеджеры или продавцы маркетплейса.
Смысл простой: сотрудник не должен иметь возможность вставить в карточку товара произвольный URL из личного облака или неизвестного домена. Администратор заранее определяет доверенные каталоги и источники. По документации WooCommerce эта возможность появилась ещё в версии 6.5 и остаётся штатным инструментом контроля источников файлов.
Download limit и Download expiry
Download limit задаёт количество разрешённых скачиваний. Например, значение 3 позволит использовать право три раза. Пустое значение означает отсутствие лимита.
Download expiry задаёт количество дней, после которых право на загрузку истечёт. Это удобно для временных материалов, но для продукта с обещанным пожизненным доступом expiry лучше не задавать либо строить отдельную модель подписки/личного кабинета.
При выборе лимита важно учитывать поведение браузеров и ranged requests. Современный браузер может получать один большой файл частями. В настройках WooCommerce есть отдельная опция учёта partial downloads, чтобы лимит работал предсказуемо и повторные запросы частей файла в коротком окне не превращались в случайное списание нескольких попыток.
Когда покупатель получает доступ
WooCommerce может выдавать permission после перехода заказа в подходящий статус. Настройка Grant access to downloadable products after payment позволяет дать доступ уже на Processing, не дожидаясь Completed. Это полезно для смешанных заказов, где вместе с физическим товаром продаётся цифровой материал.
Если включить Downloads require login, покупателю понадобится аккаунт. При этом нужно согласовать настройку с guest checkout: требование логина и анонимная покупка не должны противоречить друг другу.
Для зарегистрированного покупателя доступные файлы отображаются в My Account → Downloads. Ссылки также могут присутствовать в письмах и на странице заказа в зависимости от статуса и настроек.
Permissions на уровне заказа
Право на скачивание — отдельная сущность, связанная с заказом, товаром и файлом. Это важно при возвратах, ручном восстановлении доступа или замене файла. Администратор может отозвать или выдать permission повторно.
Начиная с WooCommerce 11.1 блок Downloadable product permissions скрыт на экране заказа по умолчанию, потому что в обычном сценарии права выдаются автоматически. При необходимости его можно включить через Screen Options. Само скрытие блока не удаляет существующие разрешения.
Что происходит, если заменить файл после покупки
Если отредактировать существующую строку файла у товара — заменить URL или имя — прошлые покупатели сохраняют permission, а их ссылка будет вести на обновлённый ресурс. Оставшийся лимит и expiry при этом сохраняются.
Если же добавить новую строку download, старые заказы автоматически права на новый файл не получают. Если бизнес обещает все будущие обновления, нужно отдельно продумать subscriptions, memberships или собственную систему выдачи.
Внешнее S3/R2/облачное хранилище
Большие архивы не всегда разумно хранить на том же диске, где работает WordPress. Но перенос в S3-совместимое хранилище сам по себе не решает безопасность. Постоянный публичный URL остаётся публичным независимо от того, лежит файл на VPS, S3 или R2.
Для закрытого контента практичная архитектура выглядит так: WooCommerce проверяет заказ и permission, серверный endpoint формирует краткоживущий подписанный URL, а объектное хранилище отдаёт файл напрямую. Тогда WordPress не прокачивает гигабайты через PHP, а ссылка перестаёт работать после истечения TTL.
Если нужна такая схема, её стоит реализовывать как отдельную интеграцию, а не пытаться спрятать публичную ссылку CSS, JavaScript или секретным названием файла.
Большие файлы и производительность
Когда файл весит сотни мегабайт или несколько гигабайт, Force Downloads может стать узким местом. Каждый активный download занимает ресурсы PHP и соединение.
Для таких проектов обычно проверяют X-Accel-Redirect/X-Sendfile или прямую выдачу из объектного хранилища после авторизации. Дополнительно полезны:
- поддержка HTTP Range для докачки;
- корректный Content-Type и Content-Disposition;
- разумные timeout на прокси и веб-сервере;
- логирование неудачных выдач;
- CDN только если он не превращает закрытый объект в публичный;
- контроль диска и резервных копий исходных файлов.
Типичные ошибки цифрового магазина
- Файл положили в Media Library. Permission есть, но прямой URL всё равно публичный.
- Включили Redirect only для платного архива. Ссылку можно передать другому человеку.
- Поставили Force Downloads для гигабайтных файлов. PHP начинает тратить лишние ресурсы.
- Не проверили guest checkout и require login. Покупатель оплатил, но не понимает, как получить файл.
- Слишком маленький download limit. Повторная загрузка после сбоя быстро исчерпывает разрешение.
- Добавили новую строку файла и ждут, что её увидят старые покупатели. Новое permission автоматически не появляется.
- Сделали публичный bucket. Защита WooCommerce перестаёт иметь смысл, если объект можно открыть напрямую.
Практическая схема проверки
- создать тестовый downloadable product;
- загрузить файл правильным способом, а не через публичную Media Library;
- проверить выбранный File download method;
- сделать тестовый заказ отдельным пользователем;
- проверить доступ до оплаты и после нужного статуса заказа;
- открыть прямой URL файла в приватном окне без авторизации;
- проверить Download limit и expiry;
- проверить повторную загрузку и ranged request для большого файла;
- посмотреть My Account → Downloads и письмо заказа;
- отозвать permission и убедиться, что старая ссылка больше не даёт доступ;
- для Nginx/Apache redirect проверить, что фактический файл закрыт от прямой выдачи;
- для cloud storage проверить срок жизни подписанной ссылки.
Безопасность WordPress вокруг цифровых файлов
Даже правильно настроенная выдача не спасёт, если у постороннего есть административный доступ к магазину или резервным копиям. Для digital-commerce особенно важны отдельные аккаунты сотрудников, минимальные роли, 2FA для администраторов, закрытые бэкапы и контроль логов.
Базовый план защиты описан в статье «Безопасность WordPress на практике». Для магазина с цифровыми товарами к нему добавляется контроль самого пути файла — от загрузки администратором до скачивания покупателем.
Когда нужна кастомная доработка
Штатного WooCommerce достаточно для обычной продажи файлов с простыми лимитами. Кастомная разработка нужна, когда требуется лицензирование, выдача ключей, версии продукта, доступ к будущим обновлениям, привязка к устройству, генерация персонального файла, watermark, интеграция с внешним S3/R2 или собственный кабинет загрузок.
A.S Groups занимается разработкой и доработкой WooCommerce-магазинов, включая цифровые продукты и интеграции. Если действующий магазин уже работает, но загрузки, права доступа или серверная выдача настроены нестабильно, можно начать с технического аудита WordPress/WooCommerce.
Обсуждение
Вопросы и комментарии
Можно уточнить детали статьи или поделиться своим опытом. Первый комментарий проходит проверку.