Jak blokujemy pliki cookie w WordPressie przed zgodą
Wtyczka Katli do WordPressa blokuje pliki cookie przed zgodą, wstrzymując skrypty na serwerze, zanim strona zostanie wysłana. Kasy WooCommerce nie rusza.
Większość problemów internetu ze zgodnością plików cookie z przepisami mieszka na WordPressie. To tam zainstalowano też najwięcej banerów zgody i tam zaskakująco wiele z nich robi niewiele.
Opublikowaliśmy katla-app/wordpress, wtyczkę, która łączy stronę na WordPressie lub sklep na WooCommerce z Katlą. Ładuje skrypt zgody, blokuje skrypty i osadzone treści bez zgody na serwerze i renderuje politykę cookies i politykę prywatności, które Katla generuje z Twoich faktycznie zeskanowanych plików cookie.
Problem z blokowaniem w przeglądarce
Blokada cookies w Katli powstrzymuje pliki cookie przed zapisaniem. To właściwy mechanizm bazowy i na ręcznie zbudowanej stronie zwykle wystarcza, bo kontrolujesz, jakie skrypty są na stronie.
WordPress to co innego. Motyw dołącza skrypt. Trzy wtyczki dołączają kolejne cztery. Page builder wstrzykuje piksel. Zanim odwiedzający załaduje stronę, są na niej trackery, których nikt świadomie nie dodał, a tracker, który się załadował, wysłał już do strony trzeciej żądanie z adresem IP i refererem, niezależnie od tego, czy udało mu się ustawić plik cookie.
Blokowanie tego w przeglądarce to wyścig, którego nie wygrywasz z pewnością. Skrypt zgody musi się wykonać, podmienić właściwe obiekty globalne i zneutralizować tag, zanim tag się uruchomi. Czasem się udaje. Potem wtyczka optymalizacyjna zmienia kolejność skryptów i już się nie udaje.
Więc zablokuj to, zanim strona zostanie wysłana
Wtyczka blokuje po stronie serwera, gdy WordPress jeszcze składa HTML. Przypisz uchwyt skryptu do kategorii, w zakładce Blocking albo w kodzie:
add_action( 'wp_enqueue_scripts', function () {
katla_block_script( 'google-analytics', 'analytics' );
katla_block_script( 'facebook-pixel', 'marketing' );
}, 20 );Skrypt, który dociera do przeglądarki, jest nieaktywny:
<script type="text/plain" data-katla-src="…" data-katla-category="analytics"></script>Nie ma wyścigu, bo wykonywalna wersja nigdy nie istniała w odpowiedzi serwera.
Szczegół, na którym zależy nam najbardziej, to los skryptów inline. Tagi analityczne rzadko
są jednym plikiem: jest loader, a potem inline’owe gtag('config', …) albo push do dataLayer
dołączony do tego samego uchwytu przez wp_add_inline_script. Blokery, które obsługują tylko
src, zwykle je gubią, a tag wraca po zgodzie źle skonfigurowany albo nie wraca wcale. Ta wtyczka
neutralizuje skrypty inline razem z ich uchwytem i odtwarza je w kolejności ze źródła, gdy
kategoria dostanie zgodę, więc tag wraca dokładnie w takiej postaci, w jakiej złożył go WordPress.
WooCommerce, gdzie psucie rzeczy słono kosztuje
Wtyczka do zgód w sklepie ma drugie zadanie, równie ważne jak zgodność z przepisami: nie psuć sklepu. Zablokuj niewłaściwy uchwyt, a koszyk przestanie się aktualizować albo kasa po cichu przestanie działać, i dowiesz się o tym od klienta.
Dlatego integracja z WooCommerce to głównie lista rzeczy, których wtyczka odmawia. Pliki cookie
koszyka, sesji i kasy całkowicie omijają blokadę: woocommerce_cart_hash,
wp_woocommerce_session_*, wc_fragments_* i podobne. Uchwyty krytyczne dla sklepu, takie jak
wc-cart-fragments, wc-checkout i wc-blocks-checkout, są usuwane z listy blokowanych, więc
nieostrożna reguła nie położy kasy. Wtyczka deklaruje zgodność z HPOS oraz z blokami koszyka i kasy.
Jeden celowy wyjątek: pliki cookie atrybucji zamówień (sbjs_*) nie są na liście dozwolonych.
To marketingowe pliki cookie, wygodne, ale jednak marketingowe. Jeśli chcesz, żeby zniknęły przed
zgodą, zablokuj uchwyt wc-order-attribution.
Trzy poziomy kontroli
Ustawienie domyślne nie wymaga kodu: Katla renderuje baner i okno preferencji, stylowane z poziomu Twojego panelu.
Jeśli wolisz mieć własny markup, tryb headless ładuje blokadę i window.KatlaConsent bez
hostowanego interfejsu, a wtyczka renderuje własny baner, tłumaczony przez WordPressa i stylowany
zmiennymi CSS, więc dziedziczy wygląd Twojego motywu:
add_filter( 'katla_banner_css_vars', function () {
return array(
'katla-primary' => '#111111',
'katla-radius' => '0px',
'katla-font' => 'var(--wp--preset--font-family--body)',
);
} );Albo całkiem wyłącz interfejs i zbuduj własny na window.KatlaConsent i zdarzeniu
katla:consent. We wszystkich trzech przypadkach pod spodem działa ta sama blokada.
Polityki, które naprawdę są na stronie
[katla_policy] renderuje wygenerowaną politykę cookies i politykę prywatności po stronie
serwera, jako część HTML strony. Nie iframe, nie pobieranie po stronie klienta, tylko prawdziwy
markup, indeksowalny, stylowany przez Twój motyw i generowany na nowo z Twoich plików cookie, gdy się
zmieniają. Każdy shortcode ma swój blok Gutenberga, a do tego jest [katla_cookie_table], jeśli
chcesz tylko tabel, oraz [katla_cookie_settings] dla linku „zarządzaj preferencjami”, którego
Twoja strona z polityką i tak potrzebuje.
Pierwsze kroki
Potrzebujesz zweryfikowanej strony w Katli z co najmniej jednym ukończonym skanowaniem: wtyczka potrzebuje danych o plikach cookie, żeby renderować polityki. Następnie:
wp plugin activate katla-consent
wp katla site-id 00000000-0000-0000-0000-000000000000
wp katla verifyAlbo wklej Site ID w Settings → Katla Consent.
Uwaga
Zostaw umiejscowienie skryptu na Head i wyklucz cdn.katla.app z opóźniania lub łączenia JS
we wtyczkach optymalizacyjnych. Blokada cookies musi zadziałać przed wszystkim, co ustawia pliki
cookie. Opóźniona blokada to najczęstszy powód, dla którego strona na WordPressie okazuje się
niezgodna z przepisami, choć wszystko wygląda na to, że działa bez zarzutu.
Przewodnik po WordPressie opisuje shortcode’y, filtry, polecenia WP-CLI i szczegóły dotyczące WooCommerce, a strona o WordPressie i WooCommerce zawiera kroki konfiguracji i pytania, które zespoły pracujące z WordPressem zadają przed zmianą narzędzia. Wtyczka jest na GitHubie: katla-app/wordpress. Zgłoszenia i pull requesty mile widziane.