Тема оформления

Документация

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.
Быстрый стартКоротко: установите плагин → активируйте лицензию → на вкладке «Методы оплаты» укажите данные магазина ЮKassa → создайте товар (цена, файл, цена) в разделе «Цифровые товары» → скопируйте готовый шорткод из карточки товара и вставьте его в любую запись или страницу. Подробности — по каждому шагу ниже.

01Что нужно перед началом

  1. WordPress 6.0 или новее, PHP 8.0+. Плагин самостоятельный — WooCommerce или другой магазинный плагин не требуется и не используется.
  2. Аккаунт ЮKassa с идентификатором магазина (shop_id) и секретным ключом — для тестов достаточно тестовых учётных данных из личного кабинета ЮKassa, для приёма реальных денег нужны боевые.
  3. Сам цифровой файл, который будете продавать — загружается в стандартную медиабиблиотеку WordPress.
  4. Рабочая отправка почты с сайта (wp_mail) — на ней держится письмо со ссылкой на скачивание после оплаты. Если сайт не отправляет письма штатно, потребуется SMTP-плагин.
  5. Лицензионный ключ WordPlace — для активации автообновлений плагина.

02Установка и активация

  1. Скачайте архив плагина из личного кабинета покупателя на WordPlace (вкладка «Мои покупки»).
  2. В админке WordPress: Плагины → Добавить новый → Загрузить плагин, выберите zip-архив, «Установить».
  3. Нажмите «Активировать». Плагин сам создаёт нужные таблицы в базе данных (заказы, купоны) при активации — никаких дополнительных действий не требуется.

После активации в меню слева появляется отдельный раздел Цифровые товары со значком иконки скачивания и пунктами: «Все товары», «Добавить товар», «Заказы», «Статистика», «Купоны», «Настройки» и «Лицензия».

03Активация лицензии

Откройте Цифровые товары → Лицензия. Ключ вы получили при покупке плагина на WordPlace — он приходит в личный кабинет покупателя, вкладка «Лицензии и ключи».

  1. Вставьте ключ (формат XXXXX-XXXXX-XXXXX-XXXXX) и нажмите «Активировать».
  2. Активация привязывает лицензию к текущему домену и открывает автоматические обновления плагина.
  3. Кнопки «Деактивировать» и «Проверить обновления» появляются после активации.
ВажноБез активной лицензии плагин продолжает работать — но вы не сможете получить обновления и техническую поддержку.

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» всегда включены и обязательны (это всё, что реально требуется для оформления заказа и отправки ссылки), для них можно поменять только подпись. Ниже — необязательные поля «Телефон» и «Комментарий к заказу» с переключателями «Включено» / «Обязательно».

Текущее состояниеПереключатели «Телефон» и «Комментарий к заказу» сохраняются в настройках, но сама форма заказа на сайте их пока не выводит — на витрине покупатель всегда видит только «Имя» и «Email». Чтобы добавить собственное поле на форму, используйте хук sds_order_form_fields (см. главу «Как устроены платежи и скачивание») — он вызывается прямо внутри формы, после стандартных полей.  

Методы оплаты (ЮKassa)

Плагин из коробки поддерживает один платёжный шлюз — ЮKassa (API v3: карты, SberPay, YooMoney и другие способы, подключённые в вашем магазине ЮKassa). Настройки:

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

Внизу вкладки — готовый Webhook URL с кнопкой «Скопировать». Его нужно указать в личном кабинете ЮKassa (раздел «Настройки» → HTTP-уведомления), чтобы плагин узнавал об успешной или отменённой оплате и мог создать ссылку скачивания.

ВажноБез корректно указанного Webhook URL в личном кабинете ЮKassa заказ останется в статусе «Ожидание» даже после успешной оплаты картой — ссылка на скачивание создаётся именно по вебхуку, а не в момент возврата покупателя на сайт.

06Публикация товара на сайте

Вставьте скопированный шорткод [sds_product id="123"] в любую запись или страницу через блок «Шорткод» (или классический редактор). CSS и JS плагина подключаются автоматически только на тех страницах, где шорткод реально используется — лишней нагрузки на остальные страницы сайта нет.

Один и тот же товар можно вставить шорткодом на нескольких страницах сразу — ограничений на количество вставок нет.

07Что видит покупатель

  1. Карточка товара — изображение, название, описание, версия, цена — в двух видах в зависимости от режима отображения товара: сразу с формой (inline) или с кнопкой «Купить сейчас», открывающей модальное окно.
  2. Форма: поля «Ваше имя» и «Email» с проверкой на лету; если включена система купонов — ссылка «У меня есть промокод», раскрывающая поле кода и кнопку «Применить» (сумма к оплате пересчитывается сразу, без перезагрузки страницы); если подключено больше одного способа оплаты — карточки выбора способа оплаты.
  3. Кнопка отправки формы уводит покупателя на страницу оплаты ЮKassa.
  4. После оплаты ЮKassa возвращает покупателя на нейтральную страницу «Спасибо за покупку!» на вашем сайте — без деталей заказа, чтобы не раскрывать лишнего по прямой ссылке.
  5. Отдельным письмом на указанный email приходит ссылка на скачивание файла — как только сервер получит подтверждение оплаты от ЮKassa (обычно почти сразу, но не в ту же секунду, что возврат на сайт).

08Купоны

Страница Цифровые товары → Купоны (видна и активна, только если включена «Система купонов» на вкладке «Общие» настроек). Кнопка «Добавить купон» открывает форму:

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

В списке купонов доступны массовые действия («Удалить», «Активировать», «Отключить») и колонка «Использован» — счётчик применений относительно лимита.

09Заказы

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

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

  • «Письмо» — повторно отправить письмо со ссылкой скачивания тому же покупателю (например, если письмо не дошло или попало в спам).
  • «Деактивировать» / «Активировать» — вручную отключить или снова включить конкретную ссылку скачивания, не дожидаясь истечения лимита или срока.

10Статистика

Страница Цифровые товары → Статистика показывает:

  • сводку заказов, выручки и скачиваний за неделю, месяц и всё время;
  • график выручки и заказов по дням — переключатель периода 7 / 14 / 30 / 90 дней;
  • топ-10 товаров по выручке — заказы, выручка, скачивания по каждому;
  • сводку по купонам — сколько раз применялись и на какую сумму скидки, с разбивкой по каждому коду.

Учитываются только оплаченные заказы (статус «Оплачен») — заявки в статусе «Ожидание» или «Отменён» в статистику не попадают.

11Как устроены платежи и скачивание

Раздел для тех, кому важно понимать техническую сторону, прежде чем подключать реальные платежи.

Подтверждение оплаты

Плагин не доверяет содержимому вебхука напрямую: получив уведомление от ЮKassa на адрес /wp-json/sds/v1/webhook/yookassa, он тут же перезапрашивает статус этого платежа через API ЮKassa своим секретным ключом и уже по этому ответу решает, считать заказ оплаченным или нет. Так исключается ситуация, когда кто-то подделает POST-запрос на webhook URL, не зная секретный ключ магазина.

Ссылка на скачивание

Файл товара никогда не отдаётся по прямому URL медиабиблиотеки. Вместо этого при оплате генерируется случайный 64-символьный токен, ссылка на скачивание выглядит как ваш-сайт.ru/?sds_download=ТОКЕН и перехватывается плагином на уровне template_redirect — WordPress отдаёт файл через PHP (readfile()), проверив перед этим статус заказа, активность ссылки, лимит скачиваний и срок действия. Реальный путь к файлу на сервере покупателю не виден никогда.

Расширение плагина

Плагин собран на хуках WordPress для дальнейшей кастомизации без правки ядра: фильтр sds_payment_gateways — добавить свой платёжный шлюз (реализовав GatewayInterface); действие sds_order_form_fields — вывести дополнительное поле прямо внутри формы заказа; фильтр sds_product_download_path — подменить путь к файлу перед отдачей; фильтр sds_serve_file — заменить стандартную отдачу файла на X-Accel-Redirect/X-Sendfile для больших файлов.

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 readfile() — для очень больших файлов на нагруженных серверах может иметь смысл подключить X-Accel-Redirect/X-Sendfile через фильтр sds_serve_file.