Notification Centre
Wersja v1.10.4 · 16 października 2026
Dodaje centrum powiadomien do WordPressa z integracja OneSignal. Obsluguje segmentacje uzytkownikow i personalizowane notyfikacje push.
Changelog
Pre-release: wdrożone i sprawdzone na wodadlafirmy.pl (16.10.2026, Playwright desktop + iPhone 13). Mechanizm aktualizacji (releases/latest) nie widzi pre-release.
Fixed
- Wyzwalacz „Kliknięcie” otwiera popup przy każdym kliknięciu. Wcześniej działał najwyżej raz na sesję karty, a po zamknięciu popupu blokował go też czas powtórzenia (puste = na zawsze), więc przycisk typu „Pobierz poradnik” po pierwszym zamknięciu przestawał działać, także po odświeżeniu strony. Kliknięcie to jawna prośba odwiedzającego, więc czas powtórzenia, zasada „raz na wizytę” i limit wyświetleń dotyczą teraz tylko wyzwalaczy automatycznych.
- Kliknięcie przed doczytaniem
main.jsnie ginie (np. pierwsze dotknięcie przycisku na telefonie). Selektory kliknięć opublikowanych popupów są wncData.clickSelectors(opcjanc_click_selectors, przeliczana przy zapisie powiadomienia), loader zapamiętuje takie kliknięcie i popup otwiera się po załadowaniu. Gdy na danej stronie żaden popup nie pasuje, zatrzymana kotwica jest wykonywana. - Kliknięcie w selektor będący kotwicą na tej samej stronie (
href="#sekcja") otwiera popup zamiast przewijać; bez JS link nadal przewija do sekcji.
🤖 Generated with Claude Code
Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.
Security
- Zarządzanie powiadomieniami domyślnie tylko dla administratora (
manage_options). Wcześniej każdy zedit_posts(np. Autor, Kierownik sklepu) mógł opublikować popup widoczny dla wszystkich, w trybie raw także z własnym CSS. Wszystkie uprawnienia typu wpisu mapują się na filtrnc_manage_capability; strony, gdzie powiadomieniami zarządzają redaktorzy, mogą go rozszerzyć (np.edit_others_posts). - Token GitHub nie trafia już do cache opcji
nc_all_options. Link w ustawieniach prowadzi do tokena „fine-grained” (tylko repozytorium wtyczki, Contents: Read-only) zamiast klasycznego tokena z dostępem do wszystkich repozytoriów.
Fixed
- Aktualizacje z GitHuba działają w tle: aktualizator jest rejestrowany także w WP-Cron i WP-CLI, nie tylko po wejściu do panelu. Wcześniej automatyczne aktualizacje i
wp plugin updatenie widziały nowych wersji.
Performance
- Paczka release zawiera zminifikowane pliki (
bin/build.sh, terser i csso):main.js105 KB → 40 KB (gzip 27 KB → 13 KB),style.css50 KB → 30 KB. Wtyczka ładuje.min., gdy istnieją; kopia z gita działa na plikach źródłowych. Paczka nie zawiera już katalogutests.
🤖 Generated with Claude Code
https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1
Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.
Changed
- Ciasteczko klienta
nc_customertylko przy zgodzie Marketing w GetTerms (wcześniej Functional albo Marketing). Znacznik służy kierowaniu promocji, więc wymaga zgody marketingowej; przy jej braku lub cofnięciu ciasteczko jest usuwane.
Performance / Security
GET /nc/v1/notifications:pidz adresu jest brany pod uwagę tylko dla opublikowanego wpisu (boty z losowymi ID nie tworzą własnych wpisów cache). Odpowiedź dla gości maCache-Control: public, max-age(do 300 s i nie dłużej niż do najbliższej granicy harmonogramu), więc działa też bez LiteSpeed i w przeglądarce; odpowiedzi dla zalogowanychprivate, no-store.- Wyłączenie wtyczki zatrzymuje jej zadania cron;
uninstall.phpczyści teżnc_hourly_cache_purgei ma poprawnie escapowaneLIKE. - Nagłówki wtyczki:
Requires at least: 5.8,Requires PHP: 7.4.
🤖 Generated with Claude Code
https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1
Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release.
Fixed
- Rotacja: zamknięty popup blokował całą grupę. Z grupy wybierany był popup „najdawniej pokazany”, zanim sprawdzono, czy w ogóle da się go pokazać. Klient, który zamknął Q4 (zamknięty na zawsze), po pierwszym Hydro nie dostawał już nic z grupy
promo-center. Teraz w losowaniu biorą udział tylko popupy, które można pokazać (nie zamknięte, w limicie wyświetleń, nie pokazane w tej wizycie, pasujące do urządzenia, przed godziną graniczną). Wspólny limit grupy bez zmian. - Zmiana ustawień wtyczki czyści cache stron (np. „Wyłącz pasek”, kolory, sticky są w HTML strony od 1.10). Jedno czyszczenie na zapis strony ustawień, tylko gdy coś się zmieniło.
- Autoukrycie licznika w popupie blokowało kolejkę popupów (ID jako tekst).
- Niepoprawna data licznika w pasku powodowała błąd krytyczny strony (PHP 8.3); teraz licznik jest pomijany.
- Skrypt przy pasku z serwera po usunięciu zamkniętego lub wygasłego slajdu aktywuje następny (zamiast pustego paska przy kilku paskach).
- Motywy bez Bricks: pasek „pod nagłówkiem” zostaje na ścieżce JS (w 1.10.0 stawał nad nagłówkiem).
Accessibility
- Szuflada powiadomień (dialog modalny z przyciskami) jest drukowana tylko na stronach z dzwonkiem
[notification_center]; wcześniej była ukrytym dialogiem na każdej stronie. - Popup na środku to dialog modalny:
role="dialog",aria-modal, nazwa z tytułu, fokus na „Zamknij” po pokazaniu, Tab w pętli, powrót fokusu po zamknięciu. Popupy w rogach mająrole="status"zamiastalert. - Krzyżyki mają
aria-label="Zamknij", popup z samym obrazkiem maaltz pola „Tekst alternatywny” obrazka w bibliotece mediów, a gdy puste, z tytułu (WCAG F89), pasek marole="region"zamiast drugiegobanner.
🤖 Generated with Claude Code
https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1
Pre-release: najpierw wdrożenie i sprawdzenie na wodadlafirmy.pl. Mechanizm aktualizacji (releases/latest) nie widzi pre-release, więc inne strony nie dostaną tej wersji automatycznie.
Added
- Odbiorcy „Tylko klienci (z zamówieniem)”. Zalogowani z co najmniej jednym zamówieniem albo przeglądarki oznaczone po zakupie ciasteczkiem
nc_customer(strona podziękowania za zamówienie i zalogowany klient, tylko po zgodzie Functional albo Marketing w banerze GetTerms; przy cofnięciu zgody ciasteczko jest usuwane). O widoczności rozstrzyga przeglądarka, więc odpowiedź REST i strony zostają w cache. Skrypt znacznika jest dołączany tylko, gdy któreś opublikowane powiadomienie używa tej opcji. Honorowane jest też ciasteczkowdf_klientz mu-pluginuwdf-nc-customers-only.php, który ta funkcja zastępuje. - Grupa rotacyjna. Powiadomienia z tą samą nazwą grupy nie pokazują się jedno po drugim: z grupy wyświetla się najwyżej jedno (to, które najdawniej było pokazane), ze wspólnym limitem 3 wyświetleń na 7 dni i przerwą 24 h (filtr
nc_rotation_limits).
Performance
- Zero kodu wtyczki przy ładowaniu strony.
main.jsistyle.cssnie są już dołączane jako znaczniki. Mały skrypt w stopce (ok. 0,5 KB) doczytuje je przy pierwszym ruchu myszy, dotknięciu, klawiszu, kółku albo przewinięciu. PageSpeed Insights i roboty wyszukiwarek nie wchodzą w interakcję ze stroną, więc nie pobierają nic z wtyczki; zapytanie do REST też idzie dopiero po interakcji. W stronie zostają tylko danencData, zmienne CSS i (gdy jest) pasek z serwera ze stylami w linii. Licznik w pasku odlicza bezmain.js. Kliknięcie w dzwonek przed doczytaniem jest odtwarzane. - Popupy automatyczne nie psują już LCP. Popup z opóźnieniem, czasem na stronie, bezczynnością albo bez wyzwalacza pokazuje się dopiero po pierwszej interakcji (dotknięcie, klik, klawisz, kółko myszy). Wcześniej obraz popupu na środku ekranu stawał się największym elementem strony: na wpisie bloga WDF LCP 13,1 s zamiast 5,5 s. Popup pojawia się 0,8 s po tej interakcji, a nie w jej trakcie, żeby nie wyskoczył pod palcem i nie przejął tego samego kliknięcia. Exit intent i klik w selektor działają bez zmian.
- Pasek górny renderowany przez serwer (paski bez podziału na urządzenia, bez „tylko klienci” i grup rotacyjnych; paski z krzyżykiem też, a zamknięte wcześniej w tej przeglądarce skrypt przy pasku usuwa przed pierwszym renderem): stoi na miejscu od pierwszego wyrenderowania, więc treść nie skacze w dół (CLS). Na Bricks trafia od razu pod nagłówek (
bricks_after_header). Style paska są wstawiane w linii tylko na stronach z paskiem. Czas życia cache strony w LiteSpeed jest skracany do najbliższej granicy harmonogramu (np. 10:00), a skrypt w linii ukrywa pasek, którego godzina graniczna już minęła. - Fluent Forms tylko wtedy, gdy potrzebny. Pliki Fluent Forms nie są już dołączane do każdej strony;
main.jsdoczytuje je tuż przed pokazaniem popupu z formularzem. GET /nc/v1/notificationscache'owalne dla gości. Front wysyła klasę urządzenia (d) i wersję (v), usuwa z adresu identyfikatory reklam (gclid, fbclid, ...). Zdodpowiedź dla gości idzie do cache LiteSpeed (TTL do 5 min albo do najbliższej granicy harmonogramu); bezd(starymain.js) zostajeno-cache.- Zdarzenia analityki w paczce: jeden
POST /nc/v1/eventsna stronę (przy ukryciu karty, wyjściu albo po 10 s) zamiast osobnego zapytania na każde zdarzenie. Stary format pojedynczego zdarzenia nadal działa. - Koniec czyszczenia całego cache LiteSpeed przy każdym zapisie powiadomienia. Cache stron jest czyszczony tylko, gdy zmienia się coś, co jest w HTML: opublikowany pasek albo lista formularzy. Pasek z regułami „pokaż na stronie o ID” / „strona główna” czyści tylko te strony (tagi
Po.,F), pasek na całą stronę czyści całość. Edycja popupu, szkic i autozapis już nie czyszczą cache sklepu. GET /nc/v1/user-notificationstylko gdy powiadomienia WooCommerce są włączone (nc_woo_enabled).
Fixed
- Baner z licznikiem dziennym i autoukrywaniem („Zamów do 10:00”) był widoczny jeszcze kilka minut po godzinie granicznej, z licznikiem ustawionym na jutro (porównanie
>zamiast>=, transient na 5 min). Teraz znika dokładnie o tej godzinie. - Autoukrycie licznika usuwało cały pasek (razem z innymi paskami) albo zostawiało pustą nakładkę popupu i blokowało kolejkę. Teraz znika tylko ten jeden element, a popup zamyka się normalnie.
- Niepoprawny selektor w wyzwalaczu „klik” rzucał wyjątek przy każdym kliknięciu na stronie.
- Formularz z reCAPTCHA w popupie nie dawał się wysłać (
grecaptcha is not defined): Fluent Forms dołącza skrypt Google podczas renderowania formularza, a treść popupu powstaje w zapytaniu REST, gdzie ten skrypt nigdy nie trafiał na stronę. REST przekazuje teraz jego adres (scripts),main.jsładuje go przed pokazaniem popupu. Na WDF dotyczyło to popupu z ebookiem (formularz 24). - Kolumna „Odbiorcy” na liście powiadomień pokazywała surowe
guests. - Podgląd
?nc_preview=1znów działa (parametr przekazywany do REST, bez transientu i bez cache).
🤖 Generated with Claude Code
https://claude.ai/code/session_011rJBiJ9CraQ5QYwMbJqGL1