Subskrypcje
Moduł subskrypcji dodaje produkty z płatnością cykliczną. Klienci kupują subskrypcje z ręcznym odnawianiem, a administrator zarządza nimi w WooCommerce.
Jak to działa
Dział zatytułowany „Jak to działa”- Administrator tworzy produkt typu “Subskrypcja” z cyklem i ceną
- Klient kupuje subskrypcję i opłaca pierwsze zamówienie
- Plugin tworzy subskrypcję ze statusem “Aktywna”
- Przed datą odnowienia klient otrzymuje przypomnienie e-mail
- W dniu odnowienia plugin tworzy zamówienie odnowienia
- Klient opłaca zamówienie odnowienia (ręczne odnowienie)
- Cykl powtarza się do anulowania subskrypcji
Konfiguracja
Dział zatytułowany „Konfiguracja”Przejdź do WooCommerce > Ustawienia > Polski > Moduły PRO > Subskrypcje.
Moduł jest kontrolowany opcją:
polski_subscriptionsUstawienia ogólne
Dział zatytułowany „Ustawienia ogólne”| Ustawienie | Opis |
|---|---|
| Włącz subskrypcje | Aktywuje moduł |
| Tryb odnowienia | Ręczne (klient opłaca zamówienie) |
| Pierwsze przypomnienie | Ile dni przed odnowieniem wyslac pierwsze przypomnienie (domyslnie 14) |
| Drugie przypomnienie | Ile dni przed odnowieniem wyslac drugie przypomnienie (domyslnie 7) |
| Okres karencji | Ile dni po terminie odnowienia subskrypcja pozostaje aktywna (domyślnie 7) |
| Automatyczne zawieszenie | Zawieszaj subskrypcję po upływie okresu karencji |
Tworzenie produktu subskrypcyjnego
Dział zatytułowany „Tworzenie produktu subskrypcyjnego”- Przejdź do Produkty > Dodaj nowy
- Wybierz typ produktu: Subskrypcja
- Skonfiguruj cenę i cykl:
| Pole | Opis |
|---|---|
| Cena subskrypcji | Kwota za okres rozliczeniowy |
| Okres rozliczeniowy | Dzień / Tydzień / Miesiąc / Rok |
| Długość okresu | Liczba okresów (np. 1 miesiąc, 3 miesiące) |
| Cena początkowa | Opcjonalna - inna cena za pierwszy okres |
| Opłata aktywacyjna | Opcjonalna - jednorazowa opłata przy pierwszym zamówieniu |
| Limit odnowień | 0 = bez limitu, lub liczba odnowień |
- Opublikuj produkt
Cena początkowa vs cena odnowienia
Dział zatytułowany „Cena początkowa vs cena odnowienia”Cena za pierwszy okres może być inna niż za kolejne. Zastosowania:
- okres próbny za darmo lub po obniżonej cenie
- promocyjna cena na start
- opłata aktywacyjna + niższa cena cykliczna
Cena początkowa dotyczy tylko pierwszego zamówienia. Kolejne odnowienia mają standardową cenę.
Cykl życia subskrypcji
Dział zatytułowany „Cykl życia subskrypcji”Pending → Active → On Hold → Active → ... → Expired → Cancelled| Status | Opis |
|---|---|
| Pending | Oczekująca na opłacenie pierwszego zamówienia |
| Active | Aktywna - klient ma dostęp do produktu |
| On Hold | Wstrzymana - zamówienie odnowienia oczekuje na opłacenie |
| Expired | Wygasła - liczba odnowień osiągnęła limit lub minął okres karencji |
| Cancelled | Anulowana przez klienta lub administratora |
Odnowienia
Dział zatytułowany „Odnowienia”Ręczne odnowienie
Dział zatytułowany „Ręczne odnowienie”Plugin obsługuje ręczne odnowienia:
- Plugin tworzy zamówienie odnowienia ze statusem “Oczekujące na płatność”
- Klient otrzymuje e-mail z linkiem do opłacenia zamówienia
- Klient opłaca zamówienie przez wybraną metodę płatności
- Po opłaceniu subskrypcja zostaje odnowiona na kolejny okres
Proces odnowienia
Dział zatytułowany „Proces odnowienia”Plugin sprawdza subskrypcje do odnowienia codziennie przez WP-Cron:
polski_daily_maintenanceCodzienne zadanie cron:
- sprawdza subskrypcje do odnowienia
- tworzy zamówienia odnowienia
- zawiesza subskrypcje po okresie karencji
- wygasza subskrypcje po osiągnięciu limitu odnowień
Przypomnienia e-mail
Dział zatytułowany „Przypomnienia e-mail”Plugin wysyla dwa przypomnienia e-mail przed data odnowienia:
| Kiedy | Tresc | |
|---|---|---|
| Pierwsze przypomnienie | 14 dni przed odnowieniem (konfigurowalne) | Informacja o zblizajacym sie odnowieniu, kwota, link do anulowania jednym kliknieciem |
| Drugie przypomnienie | 7 dni przed odnowieniem (konfigurowalne) | Ostatnie przypomnienie, kwota, link do anulowania i link do panelu |
| Zamowienie odnowienia | W dniu odnowienia | Zamowienie do oplacenia z linkiem do platnosci |
| Subskrypcja wstrzymana | Po uplywie terminu platnosci | Informacja o wstrzymaniu, link do oplacenia |
| Subskrypcja wygasla | Po uplywie okresu karencji | Informacja o wygasnieciu, link do ponownego zakupu |
Szablony e-maili można dostosować w WooCommerce > Ustawienia > E-maile.
Panel Moje konto
Dział zatytułowany „Panel Moje konto”Moduł dodaje sekcję w Moje konto pod adresem:
/moje-konto/polski-subscriptions/Lista subskrypcji
Dział zatytułowany „Lista subskrypcji”Klient widzi tabelę z subskrypcjami:
| Kolumna | Opis |
|---|---|
| Produkt | Nazwa produktu subskrypcyjnego |
| Status | Aktualny status subskrypcji |
| Cena | Kwota za okres |
| Następne odnowienie | Data następnego odnowienia |
| Akcje | Anuluj / Opłać odnowienie |
Szczegóły subskrypcji
Dział zatytułowany „Szczegóły subskrypcji”Po kliknięciu w subskrypcję klient widzi:
- pełne dane subskrypcji (produkt, cena, cykl, daty)
- historię odnowień (lista zamówień powiązanych)
- przycisk anulowania subskrypcji
- przycisk opłacenia oczekującego odnowienia (jeśli dotyczy)
Anulowanie subskrypcji
Dział zatytułowany „Anulowanie subskrypcji”Klient może anulować aktywną subskrypcję w Moje konto. Anulowanie:
- zmienia status subskrypcji na “Cancelled”
- subskrypcja pozostaje aktywna do końca bieżącego opłaconego okresu
- klient jest informowany o dacie zakończenia dostępu
polski_pro/subscription/status_changed
Dział zatytułowany „polski_pro/subscription/status_changed”Akcja wywoływana po zmianie statusu subskrypcji.
/** * @param int $subscription_id ID subskrypcji * @param string $new_status Nowy status * @param string $old_status Poprzedni status */do_action('polski_pro/subscription/status_changed', int $subscription_id, string $new_status, string $old_status);Przykład:
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); // Wysłanie ankiety o powód rezygnacji wp_mail( $subscription->get_customer_email(), 'Szkoda, że odchodzisz', 'Powiedz nam, dlaczego anulujesz subskrypcję: https://example.com/ankieta' ); }}, 10, 3);polski_pro/subscription/renewal_created
Dział zatytułowany „polski_pro/subscription/renewal_created”Akcja wywoływana po utworzeniu zamówienia odnowienia.
/** * @param int $order_id ID zamówienia odnowienia * @param int $subscription_id ID subskrypcji */do_action('polski_pro/subscription/renewal_created', int $order_id, int $subscription_id);Przykład:
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('Zamówienie odnowienia dla subskrypcji #%d', $subscription_id) );}, 10, 2);polski_pro/subscription/renewal_paid
Dział zatytułowany „polski_pro/subscription/renewal_paid”Akcja wywoływana po opłaceniu zamówienia odnowienia.
/** * @param int $order_id ID zamówienia odnowienia * @param int $subscription_id ID subskrypcji */do_action('polski_pro/subscription/renewal_paid', int $order_id, int $subscription_id);Hooki przypomnień o odnowieniu (1.8.2+)
Dział zatytułowany „Hooki przypomnień o odnowieniu (1.8.2+)”Silnik przypomnień (14 dni + 7 dni przed odnowieniem) udostępnia filtry i akcje do pełnej personalizacji:
// Zmien okna przypomnien (w dniach)add_filter('polski_subscription_reminder_windows', fn ($w) => ['first' => 21, 'second' => 7, 'last' => 1]);
// Zmien temat mailaadd_filter('polski_subscription_reminder_subject', fn ($subject, $sub, $type) => "[$type] $subject", 10, 3);
// Zmien tresc mailaadd_filter('polski_subscription_reminder_body', fn ($body, $sub, $type) => $body . "\n\nDzieki!", 10, 3);
// Dodatkowe naglowki (np. HTML mode)add_filter('polski_subscription_reminder_headers', fn () => ['Content-Type: text/html; charset=UTF-8']);
// Pomin przypomnienie dla konkretnej subskrypcjiadd_filter('polski_subscription_skip_reminder', fn ($skip, $sub) => $sub->productId === 42, 10, 2);
// Obserwuj wysylkiadd_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);Powiadomienia o zmianie ceny (1.8.3+)
Dział zatytułowany „Powiadomienia o zmianie ceny (1.8.3+)”SubscriptionRepository::updateRecurringAmount() wykrywa zmiane kwoty i automatycznie wysyla email do klienta z:
- stara i nowa kwota,
- data wejscia zmiany w zycie (nastepny cykl rozliczeniowy),
- link one-click cancel (wymogi EU consumer protection).
Hooki:
// Obserwuj zmiane kwotyadd_action('polski_subscription_amount_changed', function (int $id, float $previous, float $next) { error_log("Subscription $id: $previous -> $next");}, 10, 3);
// Personalizuj tresc mailaadd_filter('polski_subscription_amount_change_body', fn ($body, $sub, $prev, $next) => $body, 10, 4);
// Obserwuj wynik wysylkiadd_action('polski_subscription_amount_change_notified', fn ($sub, $prev, $next, $sent) => null, 10, 4);Panel administracyjny
Dział zatytułowany „Panel administracyjny”Lista subskrypcji
Dział zatytułowany „Lista subskrypcji”Przejdź do WooCommerce > Subskrypcje. Tabela zawiera:
- ID subskrypcji
- klient (imię, nazwisko, e-mail)
- produkt
- status
- cena i cykl
- data następnego odnowienia
- data utworzenia
Dostępne filtry: status, produkt, data utworzenia.
Edycja subskrypcji
Dział zatytułowany „Edycja subskrypcji”Administrator może:
- zmienić status subskrypcji
- zmienić datę następnego odnowienia
- zmienić cenę (wpływa na kolejne odnowienia)
- dodać notatkę
- przeglądać historię statusów i powiązane zamówienia
Najczęstsze problemy
Dział zatytułowany „Najczęstsze problemy”Zamówienia odnowienia nie są tworzone
Dział zatytułowany „Zamówienia odnowienia nie są tworzone”- Sprawdź, czy WP-Cron działa poprawnie (
wp_cronjest wywoływany) - Przejdź do Narzędzia > Scheduled Actions i sprawdź, czy zadanie
polski_daily_maintenancejest zaplanowane - Zweryfikuj, czy subskrypcja ma status “Active” i poprawną datę odnowienia
Klient nie otrzymuje przypomnień
Dział zatytułowany „Klient nie otrzymuje przypomnień”- Sprawdź konfigurację e-maili WooCommerce
- Zweryfikuj, czy szablon e-maila przypomnienia jest włączony
- Sprawdź ustawienie “Dni przypomnienia” - czy jest większe od 0
Subskrypcja nie zmienia statusu po opłaceniu
Dział zatytułowany „Subskrypcja nie zmienia statusu po opłaceniu”- Sprawdź, czy zamówienie odnowienia ma poprawne powiązanie z subskrypcją
- Zweryfikuj logi WooCommerce pod kątem błędów
- Sprawdź, czy bramka płatności poprawnie zmienia status zamówienia