Czy wtyczka wymaga zewnętrznej usługi mailingowej (Mailchimp, Klaviyo, Brevo)?
Nie. Plugin używa wbudowanego w WordPress wp_mail() — tej samej funkcji, której WooCommerce używa do maili o zamówieniach. Jeśli Twoje sklepowe maile dochodzą, dojdą i te. Dla najlepszej deliverability rekomendujemy zainstalować plugin SMTP (WP Mail SMTP, FluentSMTP) i podpiąć dedykowaną usługę transactional email (Amazon SES, Postmark, SendGrid, Mailgun). Plugin SMTP działa transparentnie — Stock Notifier nic nie wie o jego istnieniu i działa bez dodatkowej konfiguracji.
Co z RODO i zgodami marketingowymi?
Każdy zapis przechodzi double opt-in — klient musi potwierdzić mailem. W tabeli zapisujemy znacznik czasu zgody, IP (hashowane HMAC-SHA256, nie surowe) i user agent. To pełen audit trail wymagany przez GIODO. Tekst zgody jest edytowalny w ustawieniach — plugin zapisuje wersję obowiązującą w momencie opt-in, więc zmiana wordingu nie unieważnia starych zgód.
Czy działa z produktami wariantowymi?
Tak. Subskrybenci są zapisywani per (product_id, variation_id) — klient czekający na rozmiar L nie dostanie maila, gdy wróci rozmiar S. Detektor stock status nasłuchuje hooków zarówno simple (woocommerce_product_set_stock_status) jak i variation (woocommerce_variation_set_stock_status).
Co jeśli zrobię szybką sekwencję OOS → IS → OOS → IS (flap stanu)?
Plugin ma debounce 5 minut na transient cache per produkt — wielokrotne zmiany w krótkim oknie nie wysypią baterii maili. Plus per-subskrybent antispam window (domyślnie 24h): ta sama osoba nie dostaje dwóch powiadomień dla tego samego SKU. Te dwa mechanizmy są niezależne — pierwsze chroni przed flap, drugie przed namierzeniem konkretnego klienta.
Czy zobaczę, które maile przyniosły zamówienie?
Tak. Po ukończonym zamówieniu (woocommerce_order_status_completed) plugin matchuje billing_email z subskrybentami w statusie „notified” dla zamówionych produktów i flaguje ich jako „converted” z ID zamówienia. W tabeli widzisz dokładnie który mail skończył się sprzedażą, plus możesz wyeksportować CSV i policzyć konwersję per produkt / kategoria / kampania.
Czy plugin jest kompatybilny z HPOS (High-Performance Order Storage)?
Tak. Deklarujemy pełną kompatybilność z HPOS. Match konwersji używa wc_get_order() i nowych API zleceń, nie odpytuje post_meta. Tabela subskrybentów jest niezależna od orderów (relacja przez billing_email + product_id), więc HPOS nie wpływa na strukturę danych.
Czy są limity liczby subskrybentów / wysłanych maili?
Nie. Wersja Free nie ma żadnych limitów. Jedyne ograniczenie to wydajność Twojego hostingu — Action Scheduler dzieli kolejkę na batche po 50, więc nawet bardzo duże sklepy z 5000+ oczekujących radzą sobie bez problemu. Dla bardzo dużych wolumenów warto rozważyć dedykowany worker dla Action Scheduler (np. WC tools).
Co z odinstalowaniem? Czy mogę testować bez ryzyka?
Domyślnie tabela subskrybentów zostaje w bazie po dezaktywacji i odinstalowaniu — to ochrona przed przypadkową utratą danych. Pełny cleanup (DROP TABLE + delete options + clear transients) następuje wyłącznie gdy świadomie włączysz opcję „Skasuj dane przy odinstalowaniu” w ustawieniach i potem odinstalujesz wtyczkę.
Czy plugin obsługuje produkty na backorder (przyjmowanie zamówień przy braku stanu)?
We Free — nie bezpośrednio. Plugin opiera się na transitions outofstock → instock; produkty z backorders='notify' i stock_quantity=0 mają status onbackorder, który nie wchodzi w flow. Pro 1.0.0 zawiera dedykowany Backorder Tracker obsługujący transitions onbackorder → instock (priority 5 listener, reuse Free Notify_Dispatcher).
Czy mogę używać własnego template’a maila?
Tak. Skopiuj plik wp-content/plugins/wpnest-stock-notifier-for-woocommerce/includes/email/templates/restock-notification.php do your-theme/wpnest-stonot/restock-notification.php. Plugin użyje motywu zamiast bundlowanego template’a. Pro 1.0.0 zawiera WYSIWYG editor (TinyMCE) z templates per typ + język — bez dotykania PHP.
Co z WPML / Polylang i wielojęzycznością?
Tekst zgody, subject maila i intro powiadomienia są filtrowalne: wpnest_stonot_gdpr_consent_text, wpnest_stonot_email_subject (z subscriber_row jako context), wpnest_stonot_email_intro. Twój multilang plugin może per-visitor-locale swapować wartości. Plugin trzyma w tabeli jedną opcję per concept (NIE pair _en/_pl) — bo to filtry, nie storage, decydują o lokalizacji.
Czy mogę wysyłać dane subskrybentów do Zapiera / Make / Slacka / Discorda?
Tak. Wejdź w WooCommerce → Stock Notifier → Settings → Webhooks, wklej URL endpointa (np. Slack incoming webhook lub URL z Zapiera) i zaznacz interesujące Cię zdarzenia (subscribed / notified / converted). Plugin auto-wykrywa Slacka i Discord po hoście URL i formatuje payload natywnie; pozostałe URL-e dostają generyczny JSON {event, site, timestamp, data}. Wysyłka jest non-blocking — błędy webhooka nie spowalniają sklepu. Payload nie zawiera consent_ip, user agenta ani tokena (RODO-safe).
Czy mogę dodać reCAPTCHA / Cloudflare Turnstile / hCaptcha do formularza?
Tak — przez filter wpnest_stonot_pre_subscribe_validate. Domyślnie zwraca null (pass); zwróć WP_Error ze status data field żeby zablokować zapis z własnym kodem HTTP. Przykład dla Cloudflare Turnstile:
add_filter( 'wpnest_stonot_pre_subscribe_validate', function( $r, $request ) {
$token = $request->get_param( 'cf_turnstile_token' );
if ( ! my_turnstile_verify( $token ) ) {
return new WP_Error( 'captcha_failed', 'Captcha failed.', [ 'status' => 400 ] );
}
return $r;
}, 10, 2 );
Filter strzela po honeypot+rate-limit a przed walidacją email — bot calls są obcięte zanim dotrą do Twojej weryfikacji captcha (oszczędność quoty API u dostawcy captcha).