Cookie Consent
Cookie Consent to w pełni konfigurowalny, zgodny z RODO i CCPA banner zgody na cookies dla WordPressa. Daje odwiedzającym pełną kontrolę nad tym, które ciasteczka i skrypty śledzące działają na Twojej stronie, porządkuje cookies w czytelne kategorie, blokuje skrypty inne niż niezbędne aż do udzielenia zgody i prowadzi odporny na manipulacje log zgód, którym wykażesz zgodność podczas audytu.
Wtyczka jest lekka, na frontendzie nie ma żadnych zależności, dostarczana jest z runtime’em w czystym JavaScript i integruje się z wtyczką Polyglot, dzięki czemu treść bannera tłumaczy się automatycznie na każdy język Twojej witryny.

Wyróżniki
- Zgoda oparta na kategoriach. Cookies są od razu pogrupowane w trzy kategorie: Niezbędne (zawsze aktywne), Analityczne (Google Analytics, Matomo, Hotjar, Mixpanel) i Marketingowe (Facebook Pixel, LinkedIn Insight, Google Ads).
- Automatyczne blokowanie skryptów. Dodaj wzorce URL dla skryptów, które mają być zablokowane do czasu uzyskania zgody. Każdy wzorzec jest powiązany z kategorią i automatycznie odblokowywany w momencie, gdy odwiedzający wyrazi zgodę.
- Pięć pozycji bannera. Wybierz spośród: dół-lewo, dół-prawo, dół-środek, góra oraz wyśrodkowany modal.
- Edytor wyglądu na żywo. Skonfiguruj kolory główny, tła i tekstu natywnym swatcherem + selektorem hex, plus opcjonalny pływający przycisk ustawień. Podgląd na żywo pokazuje zmiany przed zapisaniem.
- Log zgód i statystyki. Każda decyzja jest zapisywana w dedykowanej tabeli. Wbudowany dashboard pokazuje łączną liczbę zgód, wskaźniki akceptacji per kategoria i paginowane dzienne rozbicie.
- Edytor wielojęzyczny. Wybierz język edycji z listy w zakładkach Ogólne i Kategorie i przetłumacz każdy widoczny tekst per locale. Z zainstalowaną opcjonalną wtyczką Polyglot przycisk Tłumaczenie AI automatycznie wypełnia dowolny język docelowy ze źródła.
- Wbudowane licencjonowanie i aktualizacje. Wpisz klucz licencyjny w zakładce Ogólne, by włączyć automatyczne aktualizacje jednym kliknięciem z serwera Slotix — bez ręcznego wgrywania ZIP-ów.
- Konfigurowalny czas życia cookie. Cookie zgody możesz ustawić w zakresie od 1 do 730 dni.
- Przyjazne deweloperom. API w PHP i JavaScript oraz zdarzenie DOM
ccm:consent-updatedpozwalają zintegrować banner z własnymi motywami, wtyczkami i zewnętrznymi tag managerami.
Wymagania
| Komponent | Minimalna wersja |
|---|---|
| WordPress | 5.8 (testowane do 7.0) |
| PHP | 7.4 |
| MySQL | 5.7 |
| MariaDB | 10.3 |
Wtyczka działa na każdym nowoczesnym motywie. Frontowy banner nie potrzebuje dodatkowych bibliotek, kroków build ani zewnętrznych usług. Polyglot jest opcjonalny; zainstaluj go tylko wtedy, gdy potrzebujesz wielojęzycznych tłumaczeń treści bannera.
Instalacja
- Pobierz najnowszy
cookie-consent.zipz portalu wtyczek Slotix albo z potwierdzenia zakupu. - W WordPressie przejdź do Wtyczki → Dodaj nową → Wyślij wtyczkę.
- Wybierz plik ZIP i kliknij Zainstaluj teraz.
- Po zakończeniu instalacji kliknij Włącz wtyczkę.
- Otwórz Ustawienia → Cookie Consent, żeby zacząć konfigurację. Na świeżej instalacji banner jest włączony z sensownymi domyślnymi, ale przed uruchomieniem na produkcji warto przejrzeć każdą zakładkę.
Alternatywnie możesz wrzucić rozpakowany katalog cookie-consent do /wp-content/plugins/ przez SFTP i aktywować wtyczkę z Wtyczki → Zainstalowane wtyczki.
Konfiguracja
Ekran ustawień jest podzielony na pięć zakładek: Ogólne, Wygląd, Kategorie, Blokowanie skryptów i Statystyki. Przy pierwszej konfiguracji przejdź je po kolei.
Ogólne

Zakładka Ogólne jest podzielona na cztery karty, od góry do dołu: Licencja, selektor Języka edycji, Teksty bannera i Ustawienia globalne.
Licencja. Wklej klucz licencyjny, który dostałeś w mailu potwierdzającym zakup — na przykład PILOT-XXXX-XXXX-XXXX-XXXX. Kliknij Zweryfikuj i zapisz; wtyczka skontaktuje się z serwerem aktualizacji Slotix, zwaliduje klucz względem Twojej domeny i włączy automatyczne aktualizacje jednym kliknięciem z ekranu Wtyczki w WordPressie. Bez klucza wtyczka dalej działa, ale każdą nową wersję trzeba będzie wgrać ręcznie z ZIP-a.
Język edycji. Lista z aktualnie włączonymi na stronie językami (domyślnie angielski, włoski, hiszpański, francuski i niemiecki). Każde pole tekstowe poniżej jest trzymane per język — zmiana w selektorze podmienia widoczne wartości bez utraty pozostałych. Jeśli opcjonalna wtyczka Polyglot jest zainstalowana i aktywna, obok selektora pojawia się przycisk Przetłumacz przez AI; kliknięcie wypełnia bieżący język docelowy ze źródła w języku domyślnym.
Teksty bannera. Treść pokazywana odwiedzającym. Każde pole jest zlokalizowane zgodnie z aktywnym językiem edycji.
- Tytuł bannera — nagłówek pokazywany na górze bannera; domyślnie „Szanujemy Twoją prywatność”.
- Opis bannera — akapit wyjaśniający. Wspomnij, jakie ciasteczka ustawiasz, i podlinkuj pełną politykę prywatności. Dosłowne „Polityka prywatności” w opisie jest automatycznie zamieniane na link do skonfigurowanego URL-a polityki.
- Przycisk Zaakceptuj wszystko — domyślnie „Zaakceptuj wszystkie”. Włącza wszystkie kategorie.
- Przycisk Odrzuć wszystko — domyślnie „Odrzuć wszystkie”. RODO wymaga, by był równie wyeksponowany jak Zaakceptuj wszystkie.
- Przycisk Ustawienia cookies — domyślnie „Ustawienia cookies”. Otwiera szczegółowy modal zgód z poziomu bannera.
- Przycisk Zaakceptuj wybrane — domyślnie „Zaakceptuj wybrane”. Pokazywany w modalu; zapisuje to, co odwiedzający przełączył, i zamyka dialog.
Ustawienia globalne. Działają dla wszystkich języków.
- URL polityki prywatności — adres, do którego prowadzi link „Polityka prywatności” w opisie bannera. Przyjmuje ścieżkę względną (
/polityka-prywatnosci) albo pełny URL. Zostaw puste, by ukryć link. - Wygaśnięcie cookie — jak długo decyzja jest pamiętana, w dniach. Dopuszczalne wartości: 1–730. RODO zaleca 365 dni; dłuższe wartości ograniczają ponowne monity, ale rygorystyczni audytorzy mogą je zakwestionować.
Wygląd

Zakładka Wygląd jest podzielona na trzy sekcje: Układ, Kolory i Podgląd.
Układ.
- Pozycja bannera — wybierz dół-lewo, dół-prawo, dół-środek, pasek u góry albo wyśrodkowany modal. Wyśrodkowany modal renderuje dialog z tłem blokującym interakcję ze stroną do momentu podjęcia decyzji; używaj go tylko tam, gdzie wymagana jest rygorystyczna zgodność, bo jest bardziej inwazyjny.
- Pływający przycisk — checkbox. Po włączeniu mała ikonka jest zakotwiczona w rogu strony, dzięki czemu odwiedzający mogą w każdej chwili otworzyć ustawienia zgód. W niektórych jurysdykcjach (zwłaszcza Włochy i Francja) jest wymagany.
Kolory. Każdy wiersz zestawia natywny swatcher koloru z polem hex — kliknięcie swatcha otwiera systemowy selektor koloru, a wartość hex jest synchronizowana z swatchem w obie strony.
- Kolor główny — używany dla przycisków i przełączników w modalu. Wybierz kolor spełniający kontrast WCAG AA wobec białego tekstu.
- Kolor tła — tło bannera i modala. Domyślnie biały.
- Kolor tekstu — tekst główny. Domyślnie ciemnoszary.
Podgląd. Pod wierszami kolorów siedzi miniatura bannera, która aktualizuje się w czasie rzeczywistym, gdy zmieniasz tytuły, opisy, etykiety przycisków i kolory gdzieś indziej w panelu — możesz zweryfikować efekt przed zapisem.
Kategorie

Z wtyczką przychodzą trzy kategorie. Możesz je przemianować i edytować ich opisy per język. Kategoria Niezbędne jest zawsze aktywna i pokazywana odwiedzającym z odznaką „Zawsze włączone” zamiast przełącznika — nie da się jej wyłączyć ani po stronie admina, ani przez odwiedzającego.
- Niezbędne. Ciasteczka konieczne do działania witryny — sesja, uwierzytelnianie, tokeny bezpieczeństwa, preferencja językowa. Zawsze aktywne.
- Analityczne. Ciasteczka statystyczne mierzące, jak odwiedzający korzystają z witryny. Przykłady:
_ga,_gid,_hjSession,mp_*. - Marketingowe. Ciasteczka używane do śledzenia odwiedzających między stronami na potrzeby reklam. Przykłady:
_fbp,fr,IDE,li_sugr.
Dla każdej niekoniecznej kategorii możesz edytować:
- Nazwa — wyświetlana jako tytuł kategorii w modalu ustawień. Lokalizowana per język edycji.
- Opis — pokazywany pod tytułem. Wyjaśnij prostym językiem, jakie skrypty kontroluje ta kategoria. Lokalizowany per język edycji.
- Domyślnie włączona — gdy zaznaczone, przełącznik startuje w pozycji WŁ., kiedy odwiedzający pierwszy raz otwiera modal (i tak może go wyłączyć przed kliknięciem Zaakceptuj wybrane). Gdy odznaczone, przełącznik startuje WYŁ.
Zakładka Kategorie respektuje selektor Język edycji u góry, więc możesz niezależnie napisać polskie opisy dla polskiego bannera i angielskie dla angielskiego. Ustawienia strukturalne (jakie kategorie istnieją, czy są wymagane, ich domyślny stan) są globalne i wspólne dla wszystkich języków.
Blokowanie skryptów

To tu dzieje się zgodność. Bez blokowania skryptów banner jest dekoracyjny — odwiedzający mogą odrzucić cookies, ale skrypty stron trzecich i tak się załadują.
Zakładka składa się z formularza Dodaj nowy wzorzec skryptu na górze i dwóch tabel pod spodem, jednej dla kategorii Analityczne i drugiej dla Marketingowe.
Formularz dodawania przyjmuje trzy pola:
- Nazwa — czytelna dla człowieka etykieta widoczna w tabelach admina (np. „Google Analytics”). Niewidoczna dla odwiedzających.
- Wzorzec URL — niewrażliwy na wielkość liter fragment dopasowywany do atrybutu
srckażdego skryptu i do treści inline. Przykłady:google-analytics.com,googletagmanager.com,connect.facebook.net,hotjar.com,linkedin.com/insight. - Kategoria — Analityczne albo Marketingowe. Skrypt ładowany jest dopiero po wyrażeniu zgody na tę kategorię.
Każdy wiersz w tabelach Analityczne / Marketingowe pokazuje Nazwę, Wzorzec, przełącznik statusu per wiersz (włącz/wyłącz bez kasowania) oraz akcję Usuń. Wtyczka jest dostarczana ze startowym zestawem wzorców dla najpopularniejszych platform analitycznych i reklamowych; przejrzyj go i rozbuduj pod swoją konkretną konfigurację tag managera.
Wzorce są dopasowywane przy każdym ładowaniu strony. Zablokowane skrypty mają atrybut type przepisywany na text/plain, więc przeglądarka ich nie wykonuje. Gdy zgoda zostaje udzielona, runtime znajduje zablokowane tagi, przywraca ich type do text/javascript i wstrzykuje je ponownie, żeby wykonały się natychmiast — bez przeładowywania strony.
Statystyki

Zakładka Statystyki jest tylko do odczytu i jest podzielona na trzy kafelki KPI u góry oraz paginowaną tabelę Dziennego rozbicia pod spodem.
Kafelki KPI.
- Łącznie zgód — każde Zaakceptuj wszystko, Odrzuć wszystko albo Zaakceptuj wybrane liczy się jako jeden rekord.
- Analityczne zaakceptowane — łącznie odwiedzających, którzy włączyli kategorię Analityczne, z procentem akceptacji w stosunku do Łącznie zgód.
- Marketingowe zaakceptowane — to samo dla Marketingowych.
Dzienne rozbicie. Tabela z jednym wierszem na każdy dzień kalendarzowy, w którym zarejestrowano przynajmniej jedną decyzję, pokazująca Datę, Łącznie, liczbę akceptacji Analityczne i Marketingowe. Lista jest sortowana od najnowszego i paginowana po 15 wierszy na stronę; przeskakuj przyciskami nawigacji (« ‹ › ») albo wpisz numer strony wprost do pola. W prawym górnym rogu jest łączna liczba dni.
Tych liczb używaj do oszacowania, ile ruchu analitycznego tracisz przez odrzucone zgody, oraz do wykazania audytorom, że zbieranie zgód działa.
Użytkowanie
Po skonfigurowaniu banner pojawia się automatycznie przy pierwszej wizycie i po wygaśnięciu cookie zgody. Żadne shortcody ani template tagi nie są potrzebne.
Ponowne otwarcie modala ustawień
Jeśli pływający przycisk jest wyłączony, możesz w dowolnym miejscu witryny dodać link, który pozwala odwiedzającym ponownie otworzyć ustawienia. Użyj zwykłego anchora z klasą:
<a href="#" class="ccm-open-settings">Preferencje cookies</a>Dowolny element z klasą ccm-open-settings otworzy modal zgody po kliknięciu. Przydaje się to dla linków w stopce i stron konta.
API w PHP
Kod po stronie serwera może rozgałęziać logikę na podstawie zgody, zanim wyemituje znaczniki lub doda skrypt do kolejki:
if ( function_exists( 'cookie_consent' ) && cookie_consent()->public->has_consent( 'analytical' ) ) {
wp_enqueue_script( 'my-analytics', 'https://example.com/analytics.js', array(), null, true );
}Kategorie akceptowane przez has_consent() to slugi z zakładki Kategorie: necessary, analytical, marketing, plus każdy własny slug, który dodałeś.
API w JavaScript
Frontend wystawia globalny obiekt CookieConsent z małym, stabilnym API:
// Check whether the visitor has opted in to a specific category.
CookieConsent.hasConsent('marketing'); // → true | false
// Read the full consent object.
CookieConsent.getConsent();
// → { necessary: true, analytical: true, marketing: false, ts: 1716000000 }
// Programmatically open the settings modal.
CookieConsent.openSettings();
// Wipe the stored decision so the banner reappears.
CookieConsent.resetConsent();Zdarzenie zmiany zgody
Runtime emituje zdarzenie DOM zawsze, gdy zgoda zostaje udzielona, zaktualizowana albo cofnięta. Nasłuchuj na nie, by spiąć własne integracje — na przykład wepchnąć własne zdarzenie dataLayer do Google Tag Managera:
document.addEventListener('ccm:consent-updated', function (event) {
const consent = event.detail;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'cookie_consent_update',
analytical: consent.analytical,
marketing: consent.marketing,
});
});Payload zdarzenia odzwierciedla obiekt zwracany przez CookieConsent.getConsent().
Filtr PHP
Deweloperzy PHP mogą modyfikować obiekt ustawień przekazywany do frontendowego runtime’u filtrem ccm_js_settings. Przydaje się to do nadpisywania tekstu per język albo per strona bez ruszania bazy danych:
add_filter( 'ccm_js_settings', function ( $settings ) {
if ( is_page( 'corporate' ) ) {
$settings['title'] = __( 'Corporate cookie policy', 'my-theme' );
}
return $settings;
} );Tabele w bazie danych
Przy aktywacji wtyczka tworzy dwie tabele w bazie WordPressa:
{wp_prefix}ccm_consents— jeden wiersz na decyzję zgody, ze znacznikiem czasu, zahashowanym IP, user-agentem i wyborem boolean per kategoria.{wp_prefix}ccm_blocked_scripts— wzorce blokowania skryptów skonfigurowane w panelu admina.
Obie tabele są usuwane przez dołączony uninstall.php, gdy wtyczka jest kasowana z poziomu interfejsu WordPressa.
Zrzuty ekranu
Poniższe ekrany ilustrują pełen cykl konfiguracji.






FAQ
Czy wtyczka jest od razu zgodna z RODO?
Wtyczka dostarcza wszystkie techniczne mechanizmy wymagane do zgodności z RODO: uprzednią zgodę, szczegółowe kategorie, równie wyeksponowany przycisk odrzucenia, łatwe cofnięcie zgody i log odporny na manipulacje. Zgodność jest jednak właściwością Twojej konfiguracji: trzeba jeszcze zarejestrować każdy skrypt strony trzeciej w zakładce Blokowanie skryptów, napisać rzetelną politykę prywatności i podlinkować ją z bannera.
Czy obejmuje CCPA i inne ustawy o prywatności?
Ten sam mechanizm — szczegółowe kategorie, blokowanie skryptów i dialog ustawień, który można otworzyć ponownie — spełnia wymóg „Do Not Sell” z CCPA, brytyjskie GDPR, brazylijską LGPD i większość innych nowoczesnych ustaw o prywatności. Dla tekstu przycisków per region użyj filtra ccm_js_settings razem z wtyczką geolokalizacji albo postaw na Polyglot dla wariantów językowych.
Czy spowolni moją stronę?
Nie. Frontowy runtime to jeden plik vanilla JavaScript (około 12 KB po minifikacji, bez jQuery, bez zewnętrznych zależności) ładowany z defer. Banner jest renderowany w jednym przebiegu DOM i podczas ładowania strony nie ma żadnego zdalnego wywołania.
Czy działa z wtyczkami cache?
Tak. Banner czyta stan zgody z ciasteczka first-party i renderuje się w całości po stronie klienta, więc jest zgodny z pełnostronicowymi cache’ami (WP Rocket, LiteSpeed Cache, W3 Total Cache, Cloudflare APO). Upewnij się, że warstwa cache nie wycina cookie zgody.
Jak integruje się z Google Tag Managerem?
Wspierane są dwa wzorce. Najprostszy: dodaj googletagmanager.com w zakładce Blokowanie skryptów i przypisz do kategorii Analityczne lub Marketingowe — sam GTM nie załaduje się, dopóki nie ma zgody. Bardziej elastyczny wzorzec: pozwól GTM ładować się bezwarunkowo i bramkuj poszczególne tagi wewnątrz GTM, używając zdarzenia ccm:consent-updated jako trigger.
Czy mogę przetłumaczyć banner?
Tak. Wtyczka jest w pełni umiędzynarodowiona; text domain to cookie-consent, a pliki .pot leżą w katalogu languages. Jeśli masz zainstalowaną wtyczkę Polyglot, teksty bannera są automatycznie podchwytywane i tłumaczone na każdy aktywny język. Tekst per stronę możesz też nadpisać filtrem ccm_js_settings.
Jak długo trzymana jest zgoda?
Tyle dni, ile ustawisz w Ogólne → Wygaśnięcie cookie. Domyślnie 365 dni. Po wygaśnięciu cookie banner pojawia się ponownie i odwiedzający musi wyrazić zgodę jeszcze raz.
Czy wtyczka trzyma dane osobowe?
Log zgód przechowuje hash SHA-256 adresu IP odwiedzającego (nigdy surowego IP), string user-agenta, znacznik czasu i wybory per kategoria. Nie zapisujemy nazwisk, e-maili ani pełnych adresów IP. Log ma spełnić wymóg RODO o wykazaniu, że zgoda została udzielona.
Czy mogę wyeksportować log zgód?
Log jest w standardowej tabeli WordPressa ({wp_prefix}ccm_consents) i da się go wyeksportować dowolnym narzędziem do bazy — phpMyAdmin, Adminer, wp db export lub klient SQL. Natywny eksport CSV z zakładki Statystyki jest zaplanowany na kolejne wydanie.
Rozwiązywanie problemów
Banner się nie pokazuje
Banner pokazuje się automatycznie tylko wtedy, gdy w przeglądarce odwiedzającego nie ma ciasteczka ccm_consent. Jeśli już zaakceptowałeś lub odrzuciłeś przy poprzedniej wizycie, decyzja jest pamiętana przez skonfigurowany czas — zwykle 365 dni — i banner pozostaje ukryty. Aby przetestować od zera, otwórz DevTools przeglądarki, usuń cookie ccm_consent w Application → Cookies i przeładuj. Niedestrukcyjna alternatywa: kliknij pływający przycisk ustawień (jeśli włączony) i użyj Odrzuć wszystko, by banner pojawił się przy kolejnym załadowaniu, albo wywołaj CookieConsent.resetConsent() z konsoli przeglądarki.
Skrypty dalej się ładują po odrzuceniu
Sprawdź, czy każdy skrypt śledzący jest wpisany w Blokowanie skryptów i czy wzorzec URL faktycznie pasuje. Inline skrypty wstrzykiwane przez motyw albo page buildery też są blokowane, ale tylko gdy ich treść zawiera skonfigurowany wzorzec. Zakładką Network w DevTools zidentyfikuj dokładny host żądania, które się przemknęło, i dodaj go do tabeli Blokowania skryptów.
Pływający przycisk nakłada się na inne widgety
Wyłącz Pokaż pływający przycisk w Wygląd i zamiast tego dodaj link <a class="ccm-open-settings">Preferencje cookies</a> do stopki. Daje to pełną kontrolę nad pozycją.
Statystyki pokazują zero zgód
Liczniki rosną tylko wtedy, gdy odwiedzający kliknie przycisk bannera. Same wyświetlenia strony bez interakcji nie są logowane. Jeśli widzisz zero po uruchomieniu, sprawdź, czy banner się renderuje i czy nie przeglądasz strony jako zalogowany administrator z bannerem zamkniętym wcześniej.
Tekst bannera nie jest tłumaczony
Polyglot musi być zainstalowany i aktywny, a język docelowy włączony w Polyglot → Ustawienia. Teksty bannera są tłumaczone przy pierwszym żądaniu po włączeniu języka; odwiedź jedną stronę w tym języku jako administrator, żeby uruchomić tłumaczenie.
Ustawienia resetują się po aktualizacji
Cała konfiguracja administracyjna (teksty bannera, kategorie, wygląd, tłumaczenia) leży w jednej opcji WordPressa ccm_settings. Wzorce blokowania skryptów są w tabeli {wp_prefix}ccm_blocked_scripts. Żaden z tych zbiorów nie jest ruszany podczas aktualizacji wtyczki. Jeśli widzisz resety, sprawdź, czy nie nadpisuje opcji wtyczka bezpieczeństwa albo wtyczka synchronizująca stagingi — rzadko jest to sama wtyczka Cookie Consent.