Підписки
Модуль підписок додає товари з циклічною оплатою. Клієнти купують підписки з ручним поновленням, а адміністратор керує ними у WooCommerce.
Як це працює
Section titled “Як це працює”- Адміністратор створює товар типу “Підписка” з циклом і ціною
- Клієнт купує підписку та оплачує перше замовлення
- Плагін створює підписку зі статусом “Активна”
- Перед датою поновлення клієнт отримує нагадування e-mail
- У день поновлення плагін створює замовлення поновлення
- Клієнт оплачує замовлення поновлення (ручне поновлення)
- Цикл повторюється до скасування підписки
Налаштування
Section titled “Налаштування”Перейдіть до WooCommerce > Налаштування > Polski > Модулі PRO > Підписки.
Модуль керується опцією:
polski_subscriptionsЗагальні налаштування
Section titled “Загальні налаштування”| Налаштування | Опис |
|---|---|
| Увімкнути підписки | Активує модуль |
| Режим поновлення | Ручний (клієнт оплачує замовлення) |
| Перше нагадування | За скільки днів до поновлення надіслати перше нагадування (типово 14) |
| Друге нагадування | За скільки днів до поновлення надіслати друге нагадування (типово 7) |
| Пільговий період | Скільки днів після терміну поновлення підписка залишається активною (типово 7) |
| Автоматичне призупинення | Призупиняти підписку після завершення пільгового періоду |
Створення товару-підписки
Section titled “Створення товару-підписки”- Перейдіть до Товари > Додати новий
- Виберіть тип товару: Підписка
- Налаштуйте ціну і цикл:
| Поле | Опис |
|---|---|
| Ціна підписки | Сума за розрахунковий період |
| Розрахунковий період | День / Тиждень / Місяць / Рік |
| Тривалість періоду | Кількість періодів (напр. 1 місяць, 3 місяці) |
| Початкова ціна | Опціональна - інша ціна за перший період |
| Активаційна плата | Опціональна - одноразова плата за першого замовлення |
| Ліміт поновлень | 0 = без ліміту, або кількість поновлень |
- Опублікуйте товар
Початкова ціна vs ціна поновлення
Section titled “Початкова ціна vs ціна поновлення”Ціна за перший період може відрізнятися від наступних. Застосування:
- пробний період безкоштовно або за зниженою ціною
- акційна ціна на старт
- активаційна плата + нижча циклічна ціна
Початкова ціна стосується лише першого замовлення. Наступні поновлення мають стандартну ціну.
Життєвий цикл підписки
Section titled “Життєвий цикл підписки”Pending → Active → On Hold → Active → ... → Expired → Cancelled| Статус | Опис |
|---|---|
| Pending | Очікує на оплату першого замовлення |
| Active | Активна - клієнт має доступ до товару |
| On Hold | Призупинена - замовлення поновлення очікує на оплату |
| Expired | Закінчилася - кількість поновлень досягла ліміту або минув пільговий період |
| Cancelled | Скасована клієнтом або адміністратором |
Поновлення
Section titled “Поновлення”Ручне поновлення
Section titled “Ручне поновлення”Плагін підтримує ручні поновлення:
- Плагін створює замовлення поновлення зі статусом “Очікує на оплату”
- Клієнт отримує e-mail з посиланням на оплату замовлення
- Клієнт оплачує замовлення обраним методом оплати
- Після оплати підписка поновлюється на наступний період
Процес поновлення
Section titled “Процес поновлення”Плагін перевіряє підписки до поновлення щодня через WP-Cron:
polski_daily_maintenanceЩоденне завдання cron:
- перевіряє підписки до поновлення
- створює замовлення поновлення
- призупиняє підписки після пільгового періоду
- завершує підписки після досягнення ліміту поновлень
Нагадування e-mail
Section titled “Нагадування e-mail”Плагін надсилає два нагадування e-mail перед датою поновлення:
| Коли | Зміст | |
|---|---|---|
| Перше нагадування | За 14 днів до поновлення (налаштовується) | Інформація про наближення поновлення, сума, посилання на скасування одним кліком |
| Друге нагадування | За 7 днів до поновлення (налаштовується) | Останнє нагадування, сума, посилання на скасування та посилання на панель |
| Замовлення поновлення | У день поновлення | Замовлення до оплати з посиланням на оплату |
| Підписку призупинено | Після закінчення терміну оплати | Інформація про призупинення, посилання на оплату |
| Підписка закінчилася | Після закінчення пільгового періоду | Інформація про завершення, посилання на повторну покупку |
Шаблони e-mail можна налаштувати в WooCommerce > Налаштування > E-mail.
Панель Мій акаунт
Section titled “Панель Мій акаунт”Модуль додає секцію в Мій акаунт за адресою:
/moje-konto/polski-subscriptions/Список підписок
Section titled “Список підписок”Клієнт бачить таблицю з підписками:
| Стовпець | Опис |
|---|---|
| Товар | Назва товару-підписки |
| Статус | Поточний статус підписки |
| Ціна | Сума за період |
| Наступне поновлення | Дата наступного поновлення |
| Дії | Скасувати / Оплатити поновлення |
Деталі підписки
Section titled “Деталі підписки”Після кліку на підписку клієнт бачить:
- повні дані підписки (товар, ціна, цикл, дати)
- історію поновлень (список пов’язаних замовлень)
- кнопку скасування підписки
- кнопку оплати очікуваного поновлення (якщо застосовно)
Скасування підписки
Section titled “Скасування підписки”Клієнт може скасувати активну підписку в Мій акаунт. Скасування:
- змінює статус підписки на “Cancelled”
- підписка залишається активною до кінця поточного оплаченого періоду
- клієнт інформується про дату завершення доступу
polski_pro/subscription/status_changed
Section titled “polski_pro/subscription/status_changed”Дія, що викликається після зміни статусу підписки.
/** * @param int $subscription_id ID підписки * @param string $new_status Новий статус * @param string $old_status Попередній статус */do_action('polski_pro/subscription/status_changed', int $subscription_id, string $new_status, string $old_status);Приклад:
add_action('polski_pro/subscription/status_changed', function (int $subscription_id, string $new_status, string $old_status): void { if ($new_status === 'cancelled') { $subscription = polski_pro_get_subscription($subscription_id); // Надсилання опитування про причину відмови wp_mail( $subscription->get_customer_email(), 'Шкода, що ви йдете', 'Скажіть нам, чому ви скасовуєте підписку: https://example.com/ankieta' ); }}, 10, 3);polski_pro/subscription/renewal_created
Section titled “polski_pro/subscription/renewal_created”Дія, що викликається після створення замовлення поновлення.
/** * @param int $order_id ID замовлення поновлення * @param int $subscription_id ID підписки */do_action('polski_pro/subscription/renewal_created', int $order_id, int $subscription_id);Приклад:
add_action('polski_pro/subscription/renewal_created', function (int $order_id, int $subscription_id): void { $order = wc_get_order($order_id); $order->add_order_note( sprintf('Замовлення поновлення для підписки #%d', $subscription_id) );}, 10, 2);polski_pro/subscription/renewal_paid
Section titled “polski_pro/subscription/renewal_paid”Дія, що викликається після оплати замовлення поновлення.
/** * @param int $order_id ID замовлення поновлення * @param int $subscription_id ID підписки */do_action('polski_pro/subscription/renewal_paid', int $order_id, int $subscription_id);Хуки нагадувань про поновлення (1.8.2+)
Section titled “Хуки нагадувань про поновлення (1.8.2+)”Двигун нагадувань (14 днів + 7 днів перед поновленням) надає фільтри та дії для повної персоналізації:
// Зміни вікна нагадувань (у днях)add_filter('polski_subscription_reminder_windows', fn ($w) => ['first' => 21, 'second' => 7, 'last' => 1]);
// Зміни тему листаadd_filter('polski_subscription_reminder_subject', fn ($subject, $sub, $type) => "[$type] $subject", 10, 3);
// Зміни зміст листаadd_filter('polski_subscription_reminder_body', fn ($body, $sub, $type) => $body . "\n\nДякуємо!", 10, 3);
// Додаткові заголовки (напр. HTML mode)add_filter('polski_subscription_reminder_headers', fn () => ['Content-Type: text/html; charset=UTF-8']);
// Пропусти нагадування для конкретної підпискиadd_filter('polski_subscription_skip_reminder', fn ($skip, $sub) => $sub->productId === 42, 10, 2);
// Спостерігай за надсиланнямиadd_action('polski_subscription_reminder_sent', fn ($sub, $type, $days) => error_log("Sent $type to $sub->email"), 10, 3);add_action('polski_subscription_reminder_failed', fn ($sub, $type) => error_log("Failed $type"), 10, 2);Сповіщення про зміну ціни (1.8.3+)
Section titled “Сповіщення про зміну ціни (1.8.3+)”SubscriptionRepository::updateRecurringAmount() виявляє зміну суми та автоматично надсилає лист клієнту з:
- старою і новою сумою,
- датою набрання змінами чинності (наступний розрахунковий цикл),
- посиланням one-click cancel (вимоги EU consumer protection).
Хуки:
// Спостерігай за зміною сумиadd_action('polski_subscription_amount_changed', function (int $id, float $previous, float $next) { error_log("Subscription $id: $previous -> $next");}, 10, 3);
// Персоналізуй зміст листаadd_filter('polski_subscription_amount_change_body', fn ($body, $sub, $prev, $next) => $body, 10, 4);
// Спостерігай за результатом надсиланняadd_action('polski_subscription_amount_change_notified', fn ($sub, $prev, $next, $sent) => null, 10, 4);Панель адміністратора
Section titled “Панель адміністратора”Список підписок
Section titled “Список підписок”Перейдіть до WooCommerce > Підписки. Таблиця містить:
- ID підписки
- клієнт (ім’я, прізвище, e-mail)
- товар
- статус
- ціна і цикл
- дата наступного поновлення
- дата створення
Доступні фільтри: статус, товар, дата створення.
Редагування підписки
Section titled “Редагування підписки”Адміністратор може:
- змінити статус підписки
- змінити дату наступного поновлення
- змінити ціну (впливає на наступні поновлення)
- додати нотатку
- переглядати історію статусів і пов’язані замовлення
Найчастіші проблеми
Section titled “Найчастіші проблеми”Замовлення поновлення не створюються
Section titled “Замовлення поновлення не створюються”- Перевірте, чи WP-Cron працює правильно (
wp_cronвикликається) - Перейдіть до Інструменти > Scheduled Actions і перевірте, чи завдання
polski_daily_maintenanceзаплановано - Переконайтеся, що підписка має статус “Active” і коректну дату поновлення
Клієнт не отримує нагадувань
Section titled “Клієнт не отримує нагадувань”- Перевірте налаштування e-mail WooCommerce
- Переконайтеся, що шаблон e-mail нагадування увімкнено
- Перевірте налаштування “Дні нагадування” - чи воно більше за 0
Підписка не змінює статус після оплати
Section titled “Підписка не змінює статус після оплати”- Перевірте, чи замовлення поновлення має коректний зв’язок із підпискою
- Перевірте логи WooCommerce на наявність помилок
- Перевірте, чи платіжний шлюз правильно змінює статус замовлення