Перейти до вмісту

Підписки

Модуль підписок додає товари з циклічною оплатою. Клієнти купують підписки з ручним поновленням, а адміністратор керує ними у WooCommerce.

  1. Адміністратор створює товар типу “Підписка” з циклом і ціною
  2. Клієнт купує підписку та оплачує перше замовлення
  3. Плагін створює підписку зі статусом “Активна”
  4. Перед датою поновлення клієнт отримує нагадування e-mail
  5. У день поновлення плагін створює замовлення поновлення
  6. Клієнт оплачує замовлення поновлення (ручне поновлення)
  7. Цикл повторюється до скасування підписки

Перейдіть до WooCommerce > Налаштування > Polski > Модулі PRO > Підписки.

Модуль керується опцією:

polski_subscriptions
НалаштуванняОпис
Увімкнути підпискиАктивує модуль
Режим поновленняРучний (клієнт оплачує замовлення)
Перше нагадуванняЗа скільки днів до поновлення надіслати перше нагадування (типово 14)
Друге нагадуванняЗа скільки днів до поновлення надіслати друге нагадування (типово 7)
Пільговий періодСкільки днів після терміну поновлення підписка залишається активною (типово 7)
Автоматичне призупиненняПризупиняти підписку після завершення пільгового періоду

Створення товару-підписки

Section titled “Створення товару-підписки”
  1. Перейдіть до Товари > Додати новий
  2. Виберіть тип товару: Підписка
  3. Налаштуйте ціну і цикл:
ПолеОпис
Ціна підпискиСума за розрахунковий період
Розрахунковий періодДень / Тиждень / Місяць / Рік
Тривалість періодуКількість періодів (напр. 1 місяць, 3 місяці)
Початкова цінаОпціональна - інша ціна за перший період
Активаційна платаОпціональна - одноразова плата за першого замовлення
Ліміт поновлень0 = без ліміту, або кількість поновлень
  1. Опублікуйте товар

Початкова ціна vs ціна поновлення

Section titled “Початкова ціна vs ціна поновлення”

Ціна за перший період може відрізнятися від наступних. Застосування:

  • пробний період безкоштовно або за зниженою ціною
  • акційна ціна на старт
  • активаційна плата + нижча циклічна ціна

Початкова ціна стосується лише першого замовлення. Наступні поновлення мають стандартну ціну.

Життєвий цикл підписки

Section titled “Життєвий цикл підписки”
Pending → Active → On Hold → Active → ...
→ Expired
→ Cancelled
СтатусОпис
PendingОчікує на оплату першого замовлення
ActiveАктивна - клієнт має доступ до товару
On HoldПризупинена - замовлення поновлення очікує на оплату
ExpiredЗакінчилася - кількість поновлень досягла ліміту або минув пільговий період
CancelledСкасована клієнтом або адміністратором

Плагін підтримує ручні поновлення:

  1. Плагін створює замовлення поновлення зі статусом “Очікує на оплату”
  2. Клієнт отримує e-mail з посиланням на оплату замовлення
  3. Клієнт оплачує замовлення обраним методом оплати
  4. Після оплати підписка поновлюється на наступний період

Плагін перевіряє підписки до поновлення щодня через WP-Cron:

polski_daily_maintenance

Щоденне завдання cron:

  • перевіряє підписки до поновлення
  • створює замовлення поновлення
  • призупиняє підписки після пільгового періоду
  • завершує підписки після досягнення ліміту поновлень

Плагін надсилає два нагадування e-mail перед датою поновлення:

E-mailКолиЗміст
Перше нагадуванняЗа 14 днів до поновлення (налаштовується)Інформація про наближення поновлення, сума, посилання на скасування одним кліком
Друге нагадуванняЗа 7 днів до поновлення (налаштовується)Останнє нагадування, сума, посилання на скасування та посилання на панель
Замовлення поновленняУ день поновленняЗамовлення до оплати з посиланням на оплату
Підписку призупиненоПісля закінчення терміну оплатиІнформація про призупинення, посилання на оплату
Підписка закінчиласяПісля закінчення пільгового періодуІнформація про завершення, посилання на повторну покупку

Шаблони e-mail можна налаштувати в WooCommerce > Налаштування > E-mail.

Модуль додає секцію в Мій акаунт за адресою:

/moje-konto/polski-subscriptions/

Клієнт бачить таблицю з підписками:

СтовпецьОпис
ТоварНазва товару-підписки
СтатусПоточний статус підписки
ЦінаСума за період
Наступне поновленняДата наступного поновлення
ДіїСкасувати / Оплатити поновлення

Після кліку на підписку клієнт бачить:

  • повні дані підписки (товар, ціна, цикл, дати)
  • історію поновлень (список пов’язаних замовлень)
  • кнопку скасування підписки
  • кнопку оплати очікуваного поновлення (якщо застосовно)

Клієнт може скасувати активну підписку в Мій акаунт. Скасування:

  • змінює статус підписки на “Cancelled”
  • підписка залишається активною до кінця поточного оплаченого періоду
  • клієнт інформується про дату завершення доступу

Дія, що викликається після зміни статусу підписки.

/**
* @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);

Дія, що викликається після створення замовлення поновлення.

/**
* @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);

Дія, що викликається після оплати замовлення поновлення.

/**
* @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);

Перейдіть до WooCommerce > Підписки. Таблиця містить:

  • ID підписки
  • клієнт (ім’я, прізвище, e-mail)
  • товар
  • статус
  • ціна і цикл
  • дата наступного поновлення
  • дата створення

Доступні фільтри: статус, товар, дата створення.

Адміністратор може:

  • змінити статус підписки
  • змінити дату наступного поновлення
  • змінити ціну (впливає на наступні поновлення)
  • додати нотатку
  • переглядати історію статусів і пов’язані замовлення

Замовлення поновлення не створюються

Section titled “Замовлення поновлення не створюються”
  1. Перевірте, чи WP-Cron працює правильно (wp_cron викликається)
  2. Перейдіть до Інструменти > Scheduled Actions і перевірте, чи завдання polski_daily_maintenance заплановано
  3. Переконайтеся, що підписка має статус “Active” і коректну дату поновлення

Клієнт не отримує нагадувань

Section titled “Клієнт не отримує нагадувань”
  1. Перевірте налаштування e-mail WooCommerce
  2. Переконайтеся, що шаблон e-mail нагадування увімкнено
  3. Перевірте налаштування “Дні нагадування” - чи воно більше за 0

Підписка не змінює статус після оплати

Section titled “Підписка не змінює статус після оплати”
  1. Перевірте, чи замовлення поновлення має коректний зв’язок із підпискою
  2. Перевірте логи WooCommerce на наявність помилок
  3. Перевірте, чи платіжний шлюз правильно змінює статус замовлення
Ця сторінка має суто інформаційний характер і не є юридичною консультацією. Перед впровадженням проконсультуйтеся з юристом. Polski for WooCommerce є програмним забезпеченням з відкритим кодом (GPLv2), що надається без гарантій.