Документация
Sale Digital Shortcode
Продажа цифровых товаров на любом сайте WordPress через простой шорткод: карточка товара со встроенной или модальной формой заказа, приём оплаты через ЮKassa, защищённые одноразовые ссылки скачивания, купоны, письмо с файлом покупателю и полноценная админка заказов и статистики.
Версия 1.1.0 PHP 8.0+ WordPress 6.0+
00О плагине
«Sale Digital Shortcode» превращает любую запись или страницу сайта в витрину цифрового товара — без установки WooCommerce и без магазина целиком. Каждый товар (файл, курс, шаблон, электронная книга и т.п.) — это отдельная запись специального типа «Цифровой товар», а на сайте она появляется одним шорткодом:
- карточка товара с изображением, названием, описанием, версией и ценой — в двух вариантах отображения: прямо в тексте (inline) или по кнопке в модальном окне;
- форма заказа (имя, email) с приёмом оплаты через ЮKassa — карты, SberPay, YooMoney и другие способы, которые подключены в вашем магазине ЮKassa;
- после оплаты покупателю на email автоматически уходит письмо со ссылкой на скачивание файла, а сама ссылка — не прямая, а маскированная и одноразово настраиваемая (лимит скачиваний, срок действия);
- необязательная система промокодов — процентная или фиксированная скидка, с ограничением по сумме заказа, количеству использований, сроку действия и конкретным товарам;
- админка: список заказов с возможностью повторно отправить письмо или отключить ссылку скачивания, отдельная страница купонов и страница статистики продаж с графиком;
- гибкая настройка внешнего вида — цвета, скругления, тексты кнопок и элементы карточки товара — без правки кода и CSS.
01Что нужно перед началом
- WordPress 6.0 или новее, PHP 8.0+. Плагин самостоятельный — WooCommerce или другой магазинный плагин не требуется и не используется.
- Аккаунт ЮKassa с идентификатором магазина (shop_id) и секретным ключом — для тестов достаточно тестовых учётных данных из личного кабинета ЮKassa, для приёма реальных денег нужны боевые.
- Сам цифровой файл, который будете продавать — загружается в стандартную медиабиблиотеку WordPress.
- Рабочая отправка почты с сайта (
) — на ней держится письмо со ссылкой на скачивание после оплаты. Если сайт не отправляет письма штатно, потребуется SMTP-плагин.wp_mail - Лицензионный ключ WordPlace — для активации автообновлений плагина.
02Установка и активация
- Скачайте архив плагина из личного кабинета покупателя на WordPlace (вкладка «Мои покупки»).
- В админке WordPress: Плагины → Добавить новый → Загрузить плагин, выберите zip-архив, «Установить».
- Нажмите «Активировать». Плагин сам создаёт нужные таблицы в базе данных (заказы, купоны) при активации — никаких дополнительных действий не требуется.
После активации в меню слева появляется отдельный раздел Цифровые товары со значком иконки скачивания и пунктами: «Все товары», «Добавить товар», «Заказы», «Статистика», «Купоны», «Настройки» и «Лицензия».
03Активация лицензии
Откройте Цифровые товары → Лицензия. Ключ вы получили при покупке плагина на WordPlace — он приходит в личный кабинет покупателя, вкладка «Лицензии и ключи».
- Вставьте ключ (формат
) и нажмите «Активировать».XXXXX-XXXXX-XXXXX-XXXXX - Активация привязывает лицензию к текущему домену и открывает автоматические обновления плагина.
- Кнопки «Деактивировать» и «Проверить обновления» появляются после активации.


04Создание цифрового товара
Каждый товар — отдельная запись типа «Цифровой товар»: Цифровые товары → Добавить товар.
Основные поля
| Поле | Что указать |
|---|---|
| Заголовок | Название товара — показывается на карточке. |
| Отрывок (Excerpt) | Стандартное поле WordPress «Отрывок» используется как описание товара на карточке. Если панель «Отрывок» не видна — включите её через «Настройки экрана» вверху страницы редактирования. |
| Изображение записи | Стандартная миниатюра WordPress — показывается на карточке товара (можно отключить в настройках внешнего вида). |
| Цена | Число, 0 — для бесплатного товара. |
| Версия | Произвольная строка (например, «1.0.0») — необязательное поле, показывается бейджем рядом с ценой. |

Файл, лимит скачиваний и срок ссылки
В блоке «Параметры товара» кнопка «Выбрать файл» открывает стандартную медиабиблиотеку WordPress — файл товара загружается туда же, где изображения и документы сайта, но не отдаётся напрямую по URL медиабиблиотеки (см. главу «Как устроены платежи и скачивание»).
- Лимит скачиваний — сколько раз можно скачать файл по одной ссылке. 0 — без ограничений.
- Срок ссылки (дней) — сколько дней после оплаты ссылка остаётся действительной. 0 — бессрочная ссылка.
В отдельном боковом блоке «Отображение формы» выбирается, как товар будет показан на сайте: «Встроенная (inline)» — форма сразу видна в тексте страницы, или «Модальное окно» — на странице только карточка с кнопкой, форма открывается поверх контента.
Шорткод товара
Как только товар сохранён, в боковом блоке «Шорткод» появляется готовая строка вида с кнопкой копирования. Вставьте её в любую запись, страницу или виджет с поддержкой шорткодов.[sds_product id="123"]
Необязательный атрибут переопределяет текст кнопки покупки для конкретной вставки: button_text.[sds_product id="123" button_text="Купить сейчас"]

05Настройка плагина
Все настройки собраны на одной странице — Цифровые товары → Настройки, четыре вкладки.
Общие
- Валюта — код ISO 4217 (например, RUB, USD, EUR), показывается рядом с ценой на карточке и в письмах.
- Имя отправителя писем — что покупатель видит в поле «От» письма со ссылкой на скачивание.
- Лимит скачиваний по умолчанию и Срок действия ссылки (дней) — справочные значения-подсказки, применяются вручную к каждому товару отдельно (см. «Файл, лимит скачиваний и срок ссылки»).
- Способ оплаты по умолчанию — какой платёжный шлюз использовать, если у покупателя нет явного выбора на форме (сейчас в плагине только ЮKassa, поле готово под будущие шлюзы).
- Система купонов — общий выключатель. Пока выключен, поле промокода на форме заказа не показывается и AJAX-проверка купона отклоняет запросы, даже если сами купоны созданы.

Внешний вид
Полностью визуальная настройка — без CSS. Разделы страницы:
- Цвета — акцентный цвет (кнопки, ценник, фокус полей), цвет текста на кнопках, фон карточки/модала, фон полей ввода, цвет рамок, основной и приглушённый цвет текста — с живым предпросмотром кнопки.
- Форма и размеры — скругление углов (0 = острые, 50 = капсула), ширина модального окна, размытие фона под модалом.
- Кнопки и тексты — отдельные тексты для кнопки «Купить» на встроенной форме, кнопки открытия модала и кнопки оплаты внутри модала.
- Элементы карточки товара — показывать ли изображение и где (слева от описания или сверху на всю ширину для inline-формы), показывать ли описание и бейдж версии.
- Модальное окно — показывать ли мини-карточку товара (изображение, название, цена) в шапке диалога.
- Форма заказа — значок безопасности под кнопкой оплаты и его текст (по умолчанию «Безопасная оплата»).


Форма заказа
Таблица-конструктор полей формы: «Имя» и «Email» всегда включены и обязательны (это всё, что реально требуется для оформления заказа и отправки ссылки), для них можно поменять только подпись. Ниже — необязательные поля «Телефон» и «Комментарий к заказу» с переключателями «Включено» / «Обязательно».

Методы оплаты (ЮKassa)
Плагин из коробки поддерживает один платёжный шлюз — ЮKassa (API v3: карты, SberPay, YooMoney и другие способы, подключённые в вашем магазине ЮKassa). Настройки:
| Поле | Что указать |
|---|---|
| Включить | Активирует шлюз для приёма оплаты. Без этой галочки шлюз не появляется на форме заказа, даже если остальные поля заполнены. |
| Тестовый режим | Пока включён — используются поля «Тестовый идентификатор магазина» и «Тестовый секретный ключ» вместо боевых. |
| Идентификатор магазина / Секретный ключ | Боевые учётные данные из раздела «Настройки» → «Ключи API» личного кабинета ЮKassa. |
| Тестовый идентификатор магазина / Тестовый секретный ключ | Те же данные, но из тестового магазина ЮKassa — для проверки без реальных списаний. |
| Фискальные чеки (54-ФЗ) | Включено по умолчанию — плагин передаёт данные для чека вместе с платежом. Отключите, если к магазину не подключена онлайн-касса в ЮKassa. |
Внизу вкладки — готовый Webhook URL с кнопкой «Скопировать». Его нужно указать в личном кабинете ЮKassa (раздел «Настройки» → HTTP-уведомления), чтобы плагин узнавал об успешной или отменённой оплате и мог создать ссылку скачивания.

06Публикация товара на сайте
Вставьте скопированный шорткод в любую запись или страницу через блок «Шорткод» (или классический редактор). CSS и JS плагина подключаются автоматически только на тех страницах, где шорткод реально используется — лишней нагрузки на остальные страницы сайта нет.[sds_product id="123"]
Один и тот же товар можно вставить шорткодом на нескольких страницах сразу — ограничений на количество вставок нет.
07Что видит покупатель
- Карточка товара — изображение, название, описание, версия, цена — в двух видах в зависимости от режима отображения товара: сразу с формой (inline) или с кнопкой «Купить сейчас», открывающей модальное окно.
- Форма: поля «Ваше имя» и «Email» с проверкой на лету; если включена система купонов — ссылка «У меня есть промокод», раскрывающая поле кода и кнопку «Применить» (сумма к оплате пересчитывается сразу, без перезагрузки страницы); если подключено больше одного способа оплаты — карточки выбора способа оплаты.
- Кнопка отправки формы уводит покупателя на страницу оплаты ЮKassa.
- После оплаты ЮKassa возвращает покупателя на нейтральную страницу «Спасибо за покупку!» на вашем сайте — без деталей заказа, чтобы не раскрывать лишнего по прямой ссылке.
- Отдельным письмом на указанный email приходит ссылка на скачивание файла — как только сервер получит подтверждение оплаты от ЮKassa (обычно почти сразу, но не в ту же секунду, что возврат на сайт).




08Купоны
Страница Цифровые товары → Купоны (видна и активна, только если включена «Система купонов» на вкладке «Общие» настроек). Кнопка «Добавить купон» открывает форму:
- Код купона — уникальный, автоматически переводится в верхний регистр.
- Тип скидки — процент или фиксированная сумма.
- Размер скидки — 0–100 для процента, в единицах валюты для фиксированной суммы.
- Минимальная сумма заказа — купон не сработает на заказ дешевле этой суммы. 0 — без ограничения.
- Максимум использований — сколько раз всего можно применить купон (по всем покупателям вместе). 0 — без ограничения.
- Срок действия до — дата, после которой купон перестаёт работать. Пусто — бессрочный.
- Только для товаров — мультивыбор конкретных товаров; если ничего не выбрано, купон действует на все товары.
- Статус — «Активен» / отключён, без удаления самого купона.
В списке купонов доступны массовые действия («Удалить», «Активировать», «Отключить») и колонка «Использован» — счётчик применений относительно лимита.


09Заказы
Страница Цифровые товары → Заказы — таблица со всеми заказами: товар, покупатель (с ссылкой mailto), сумма, статус (Ожидание / Оплачен / Отменён), счётчик скачиваний, статус ссылки (Активна / Деактивирована / Истекла / Лимит) и дата. Поиск по имени или email, фильтр по статусу, сортировка по колонкам.
Для оплаченных заказов доступны быстрые действия без перезагрузки страницы:
- «Письмо» — повторно отправить письмо со ссылкой скачивания тому же покупателю (например, если письмо не дошло или попало в спам).
- «Деактивировать» / «Активировать» — вручную отключить или снова включить конкретную ссылку скачивания, не дожидаясь истечения лимита или срока.


10Статистика
Страница Цифровые товары → Статистика показывает:
- сводку заказов, выручки и скачиваний за неделю, месяц и всё время;
- график выручки и заказов по дням — переключатель периода 7 / 14 / 30 / 90 дней;
- топ-10 товаров по выручке — заказы, выручка, скачивания по каждому;
- сводку по купонам — сколько раз применялись и на какую сумму скидки, с разбивкой по каждому коду.
Учитываются только оплаченные заказы (статус «Оплачен») — заявки в статусе «Ожидание» или «Отменён» в статистику не попадают.

11Как устроены платежи и скачивание
Раздел для тех, кому важно понимать техническую сторону, прежде чем подключать реальные платежи.
Подтверждение оплаты
Плагин не доверяет содержимому вебхука напрямую: получив уведомление от ЮKassa на адрес , он тут же перезапрашивает статус этого платежа через API ЮKassa своим секретным ключом и уже по этому ответу решает, считать заказ оплаченным или нет. Так исключается ситуация, когда кто-то подделает POST-запрос на webhook URL, не зная секретный ключ магазина./wp-json/sds/v1/webhook/yookassa
Ссылка на скачивание
Файл товара никогда не отдаётся по прямому URL медиабиблиотеки. Вместо этого при оплате генерируется случайный 64-символьный токен, ссылка на скачивание выглядит как и перехватывается плагином на уровне ваш-сайт.ru/?sds_download=ТОКЕН — WordPress отдаёт файл через PHP (template_redirect), проверив перед этим статус заказа, активность ссылки, лимит скачиваний и срок действия. Реальный путь к файлу на сервере покупателю не виден никогда.readfile()
Расширение плагина
Плагин собран на хуках WordPress для дальнейшей кастомизации без правки ядра: фильтр — добавить свой платёжный шлюз (реализовав sds_payment_gateways); действие GatewayInterface — вывести дополнительное поле прямо внутри формы заказа; фильтр sds_order_form_fields — подменить путь к файлу перед отдачей; фильтр sds_product_download_path — заменить стандартную отдачу файла на X-Accel-Redirect/X-Sendfile для больших файлов.sds_serve_file
12Частые проблемы
Покупатель оплатил, но письмо со ссылкой не пришло
В первую очередь проверьте, что Webhook URL действительно указан в личном кабинете ЮKassa (см. «Методы оплаты (ЮKassa)») — без него плагин не узнаёт об оплате вообще, заказ останется в статусе «Ожидание». Если заказ уже в статусе «Оплачен», а письма всё равно нет — проверьте отправку почты сайтом (wp_mail) и повторно отправьте письмо кнопкой «Письмо» на странице «Заказы».
Ссылка на скачивание не открывается
Страница «Заказы» покажет причину в колонке «Ссылка»: «Деактивирована» (отключена вручную администратором), «Истекла» (закончился срок действия) или «Лимит» (исчерпан лимит скачиваний). Активировать ссылку заново можно кнопкой «Активировать» в той же строке.
Форма заказа не появляется на странице
Проверьте, что шорткод указывает на существующий и опубликованный товар — [sds_product id="123"] с верным ID. Для пользователей с правом редактирования записей (администраторы, редакторы) плагин показывает текст ошибки прямо на странице; для обычных посетителей ошибка выводится пустой строкой, чтобы не показывать техническую информацию всем подряд.
Промокод не применяется
Проверьте по порядку: включена ли «Система купонов» на вкладке «Общие» настроек; не истёк ли срок действия купона и не исчерпан ли лимит использований; не ниже ли сумма заказа минимальной суммы купона; не ограничен ли купон конкретным списком товаров, в который не входит текущий товар.
На вкладке «Форма заказа» включил «Телефон», но поле не появилось на сайте
Ожидаемое поведение на данный момент — см. предупреждение в главе «Форма заказа». Добавить собственное поле можно через хук .sds_order_form_fields
13Технические ограничения
- Из коробки поддерживается один платёжный шлюз — ЮKassa. Добавить другой можно только программно через фильтр
. Или подождите, в следующих обновлениях мы начнем добавлять новые способы оплаты.sds_payment_gateways - Переключатели «Телефон» и «Комментарий к заказу» на вкладке «Форма заказа» сохраняются в настройках, но пока не выводятся на реальной форме заказа на сайте — работают только «Имя» и «Email».
- «Лимит скачиваний по умолчанию» и «Срок действия ссылки» на вкладке «Общие» не подставляются автоматически в новые товары — их нужно вписывать в каждый товар вручную.
- Статус заказа обновляется только по вебхуку ЮKassa — если Webhook URL не настроен в личном кабинете ЮKassa, заказы будут «зависать» в статусе «Ожидание» даже после успешной оплаты.
- Файл товара отдаётся стандартным PHP
— для очень больших файлов на нагруженных серверах может иметь смысл подключить X-Accel-Redirect/X-Sendfile через фильтрreadfile().sds_serve_file