Cookie Consent
Cookie Consent este un banner de consimțământ cookies pentru WordPress complet personalizabil, conform GDPR și CCPA. Le oferă vizitatorilor control total asupra cookies-urilor și a script-urilor de tracking care rulează pe site, organizează cookies-urile în categorii clare, oprește încărcarea script-urilor neesențiale fără aprobare și ține un log al consimțămintelor rezistent la manipulare, ca să poți dovedi conformitatea în caz de audit.
Plugin-ul este ușor, fără dependențe pe frontend, este livrat cu un runtime în JavaScript vanilla și se integrează cu plugin-ul Polyglot, astfel încât textele banner-ului sunt traduse automat pentru fiecare limbă a site-ului.

Puncte forte
- Consimțământ pe categorie. Cookies-urile sunt grupate din start în trei categorii: Necesare (mereu active), Analitice (Google Analytics, Matomo, Hotjar, Mixpanel) și Marketing (Facebook Pixel, LinkedIn Insight, Google Ads).
- Blocare automată a script-urilor. Adaugă pattern-uri URL pentru script-urile care trebuie blocate până la acordarea consimțământului. Fiecare pattern este mapat pe o categorie și se deblochează automat în momentul în care vizitatorul acceptă.
- Cinci poziții ale banner-ului. Alege între Jos stânga, Jos dreapta, Jos centru, Sus și Modal centrat.
- Editor de aspect în timp real. Configurează culorile primară, de fundal și de text cu un swatch nativ + selector hex, plus un buton flotant opțional pentru setări. O previzualizare live arată modificările înainte să salvezi.
- Log și statistici ale consimțămintelor. Fiecare decizie de consimțământ este stocată într-un tabel dedicat. Un dashboard integrat afișează totalul consimțămintelor, rata de acceptare pe categorie și un breakdown zilnic paginat.
- Editor multilingv. Alege limba pe care o editezi dintr-un dropdown în taburile Generale și Categorii și tradu fiecare string vizibil pentru fiecare locale. Cu plugin-ul opțional Polyglot instalat, un buton Translate cu AI completează automat orice limbă țintă pornind de la sursă.
- Licențiere și actualizări integrate. Introdu cheia de licență în tabul General pentru a activa actualizările automate cu un click de la serverul de update Slotix — fără să mai urci ZIP-uri manual.
- Durată cookie configurabilă. Cookie-ul de consimțământ poate fi setat să expire între 1 și 730 de zile.
- Developer friendly. API-uri PHP și JavaScript plus un eveniment DOM
ccm:consent-updatedte lasă să te integrezi cu teme custom, plugin-uri și tag managere terțe.
Cerințe
| Componentă | Versiune minimă |
|---|---|
| WordPress | 5.8 (testat până la 7.0) |
| PHP | 7.4 |
| MySQL | 5.7 |
| MariaDB | 10.3 |
Plugin-ul funcționează cu orice temă modernă. Nu sunt necesare librării suplimentare, pași de build sau servicii externe pentru ca banner-ul de pe frontend să ruleze. Polyglot este opțional; instalează-l doar dacă ai nevoie de traduceri multilingve ale textelor banner-ului.
Instalare
- Descarcă cel mai recent
cookie-consent.zipdin portalul de plugin-uri Slotix sau din chitanța de cumpărare. - În WordPress, mergi la Plugins → Add New → Upload Plugin.
- Selectează fișierul ZIP și apasă Install Now.
- Apasă Activate Plugin când instalarea se termină.
- Deschide Settings → Cookie Consent ca să începi configurarea. Pe o instalare proaspătă banner-ul este activ cu default-uri rezonabile, dar e bine să treci prin fiecare tab înainte să intri în producție.
Alternativ, poți urca prin SFTP folderul cookie-consent dezarhivat în /wp-content/plugins/ și apoi să activezi plugin-ul din Plugins → Installed Plugins.
Configurare
Ecranul de setări este împărțit în cinci taburi: Generale, Aspect, Categorii, Blocare script-uri și Statistici. La prima configurare, parcurge-le în ordine.
Generale

Tabul Generale este împărțit în patru carduri, de sus în jos: Licență, selectorul Limba de editare, Texte banner și Setări globale.
Licență. Lipește cheia de licență primită pe email-ul de confirmare a achiziției — de exemplu PILOT-XXXX-XXXX-XXXX-XXXX. Apasă Verifică și salvează; plugin-ul contactează serverul de update Slotix, validează cheia față de domeniul tău și activează actualizările automate dintr-un click din ecranul Plugins al WordPress-ului. Fără cheie, plugin-ul continuă să funcționeze, dar va trebui să urci manual ZIP-uri noi la fiecare release.
Limba de editare. Un dropdown care listează limbile active pe site (din start italiana, engleza, spaniola, franceza și germana). Fiecare câmp text de mai jos este stocat per limbă — schimbând selectorul, se schimbă valorile vizibile fără a pierde celelalte. Dacă plugin-ul opțional Polyglot este instalat și activ, lângă selector apare un buton Translate cu AI; apasă-l ca să completezi automat limba țintă pornind de la limba sursă.
Texte banner. Textele afișate vizitatorilor. Fiecare câmp este localizat conform limbii de editare active.
- Titlu banner — antet afișat în partea de sus a banner-ului; default: „Îți respectăm confidențialitatea”.
- Descriere banner — paragraf explicativ. Spune ce cookies setezi și pune un link la politica completă. Fraza literală „Privacy Policy” din interiorul descrierii este convertită automat într-un link către URL-ul politicii de confidențialitate configurate.
- Buton Accept toate — default: „Accept toate”. Înrolează vizitatorul în toate categoriile.
- Buton Refuz toate — default: „Refuz toate”. Cerut de GDPR să fie la fel de vizibil ca Accept toate.
- Buton Setări cookies — default: „Setări cookies”. Deschide modal-ul de consimțământ granular din banner.
- Buton Accept selectate — default: „Accept selectate”. Afișat în modal; salvează ce a selectat vizitatorul și închide fereastra.
Setări globale. Se aplică tuturor limbilor.
- URL Privacy Policy — destinația linkului „Privacy Policy” inline din descrierea banner-ului. Acceptă o cale relativă (
/privacy-policy) sau un URL complet. Lasă gol pentru a ascunde linkul. - Expirare cookie — câte zile este memorată decizia de consimțământ. Valori acceptabile: de la 1 la 730. Recomandarea GDPR este 365 de zile; valori mai mari reduc re-prompturile, dar pot fi semnalate de auditori stricți.
Aspect

Tabul Aspect este organizat în trei secțiuni: Layout, Culori și Previzualizare.
Layout.
- Poziție banner — alege Jos stânga, Jos dreapta, Jos centru, Bar sus sau Modal centrat. Modal-ul centrat afișează o fereastră centrată cu un fundal care blochează interacțiunea cu pagina până la decizie; folosește-l doar când e cerută conformitate strictă, fiindcă este mai intruziv.
- Buton flotant — checkbox. Dacă e activ, o iconiță mică rămâne ancorată în colțul paginii, ca vizitatorii să poată redeschide oricând setările de consimțământ. Cerut în unele jurisdicții (în special Italia și Franța).
Culori. Fiecare rând cuplează un swatch nativ de culoare cu un input hex — click pe swatch deschide selectorul de culoare al sistemului de operare, iar valoarea hex rămâne sincronizată cu swatch-ul în ambele sensuri.
- Culoare primară — folosită pentru butoane și toggles în modal. Alege o culoare care îndeplinește contrastul WCAG AA pentru text alb.
- Culoare fundal — fundalul banner-ului și al modal-ului. Default: alb.
- Culoare text — text de bază. Default: un gri închis.
Previzualizare. O miniatură live a banner-ului stă sub rândurile de culori și se actualizează în timp real pe măsură ce schimbi titluri, descrieri, labels de butoane și culori în alte zone ale adminului — ca să poți verifica rezultatul înainte de salvare.
Categorii

Plugin-ul vine cu trei categorii. Le poți redenumi și le poți edita descrierile pe limbă. Categoria Necesare este mereu activă și este afișată vizitatorilor cu un badge „Mereu activ” în loc de toggle — nu poate fi dezactivată și nici închisă de vizitator.
- Necesare. Cookies-urile necesare pentru funcționarea site-ului — sesiune, autentificare, token-uri de securitate, preferință de limbă. Mereu active.
- Analitice. Cookies-uri statistice care măsoară cum interacționează vizitatorii cu site-ul. Exemple:
_ga,_gid,_hjSession,mp_*. - Marketing. Cookies-uri folosite pentru a urmări vizitatorii între site-uri în scop publicitar. Exemple:
_fbp,fr,IDE,li_sugr.
Pentru fiecare categorie non-necesară poți edita:
- Nume — afișat ca titlu al categoriei în modal-ul de setări. Localizat per limbă de editare.
- Descriere — afișată sub titlu. Explică în limbaj simplu ce script-uri controlează categoria. Localizată per limbă de editare.
- Activă din start — când e bifată, toggle-ul pornește în poziția ON la prima deschidere a modal-ului (vizitatorul îl poate închide înainte să apese Accept selectate). Când e nebifată, toggle-ul pornește OFF.
Tabul Categorii respectă selectorul Limba de editare din partea de sus, deci poți scrie descrieri în română pentru banner-ul în română și descrieri în engleză pentru banner-ul în engleză, independent. Setările structurale (ce categorii există, dacă sunt obligatorii, starea lor default) sunt globale și sunt partajate între limbi.
Blocare script-uri

Aici se întâmplă conformitatea. Fără blocare de script-uri, banner-ul este decorativ — vizitatorii pot refuza cookies-urile, dar script-urile terțe se vor încărca oricum.
Tabul este împărțit într-un formular Adaugă pattern nou sus și două tabele jos, unul pentru categoria Analitice și unul pentru Marketing.
Formularul de adăugare ia trei câmpuri:
- Nume — o etichetă human-readable care apare în tabelele de admin (ex. „Google Analytics”). Nu este vizibilă pentru vizitatori.
- Pattern URL — un substring case-insensitive testat față de atributul
srcal fiecărui script și față de body-ul inline. Exemple:google-analytics.com,googletagmanager.com,connect.facebook.net,hotjar.com,linkedin.com/insight. - Categorie — Analitică sau Marketing. Script-ul se încarcă doar după ce vizitatorul a acceptat acea categorie.
Fiecare rând din tabelele Analitice / Marketing arată Nume, Pattern, un toggle de Status per rând (activează/dezactivează fără ștergere) și o acțiune Șterge. Plugin-ul vine cu un set de pornire de pattern-uri pentru cele mai uzuale platforme de analytics și ads; revizuiește-l și extinde-l în funcție de configurația ta reală de tag manager.
Pattern-urile sunt verificate la fiecare încărcare de pagină. Script-urilor blocate li se rescrie atributul type la text/plain, ca browser-ul să nu le execute. Când se acordă consimțământul, runtime-ul localizează tag-urile blocate, le restaurează type-ul la text/javascript și le re-injectează ca să se execute imediat, fără reîncărcare de pagină.
Statistici

Tabul Statistici este read-only și este organizat în trei plăcuțe KPI sus și un tabel Breakdown zilnic paginat dedesubt.
Plăcuțe KPI.
- Total consimțăminte — fiecare Accept toate, Refuz toate sau Accept selectate contează ca o înregistrare.
- Analitice acceptate — totalul vizitatorilor care au acceptat Analitice, cu procentul de acceptare raportat la Total consimțăminte.
- Marketing acceptate — la fel pentru Marketing.
Breakdown zilnic. Un tabel cu un rând per zi calendaristică în care a fost înregistrată cel puțin o decizie de consimțământ, cu Data, Total, contoarele de acceptare Analitice și Marketing. Lista este sortată cu cele mai noi primele și este paginată câte 15 rânduri per pagină; folosește butoanele de navigare (« ‹ › ») sau tastează direct un număr de pagină în input pentru a sări. Colțul din dreapta sus afișează numărul total de zile.
Folosește aceste numere pentru a estima cât din traficul tău de analytics pierzi din cauza refuzurilor de consimțământ și pentru a demonstra auditorilor că strângerea consimțământului funcționează.
Utilizare
Odată configurat, banner-ul apare automat la prima vizită și după ce expiră cookie-ul de consimțământ. Nu sunt necesare shortcoduri sau template tags.
Redeschiderea modal-ului de setări
Dacă butonul flotant este dezactivat, poți adăuga oriunde pe site un link care îi lasă pe vizitatori să redeschidă setările. Folosește un anchor obișnuit cu o clasă:
<a href="#" class="ccm-open-settings">Preferințe cookies</a>Orice element cu clasa ccm-open-settings va deschide modal-ul de consimțământ la click. Util pentru linkuri din footer și pagini de cont.
API PHP
Cod server-side se poate ramifica pe consimțământ înainte de a emite markup sau de a face enqueue de script-uri:
if ( function_exists( 'cookie_consent' ) && cookie_consent()->public->has_consent( 'analytical' ) ) {
wp_enqueue_script( 'my-analytics', 'https://example.com/analytics.js', array(), null, true );
}Categoriile acceptate de has_consent() sunt slug-urile din tabul Categorii: necessary, analytical, marketing, plus orice slug-uri custom adăugate.
API JavaScript
Frontend-ul expune un global CookieConsent cu un API mic și stabil:
// 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();Eveniment de schimbare a consimțământului
Runtime-ul dispatch-uiește un eveniment DOM ori de câte ori consimțământul este acordat, actualizat sau revocat. Ascultă-l pentru a alimenta propriile integrări — de exemplu, pentru a trimite un eveniment custom în dataLayer-ul Google Tag Manager:
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-ul evenimentului oglindește obiectul returnat de CookieConsent.getConsent().
Filter hook
Developerii PHP pot modifica obiectul de setări trimis către runtime-ul de frontend folosind filtrul ccm_js_settings. Util pentru a suprascrie texte pe limbă sau pe pagină fără să atingi baza de date:
add_filter( 'ccm_js_settings', function ( $settings ) {
if ( is_page( 'corporate' ) ) {
$settings['title'] = __( 'Corporate cookie policy', 'my-theme' );
}
return $settings;
} );Tabele de bază de date
La activare, plugin-ul creează două tabele în baza de date WordPress:
{wp_prefix}ccm_consents— câte un rând per decizie de consimțământ, cu timestamp, IP hashed, user agent și alegerile booleene per categorie.{wp_prefix}ccm_blocked_scripts— pattern-urile de blocare a script-urilor configurate în admin.
Ambele tabele sunt șterse de uninstall.php-ul inclus când plugin-ul este șters prin UI-ul WordPress.
Screenshot-uri
Ecranele de mai jos ilustrează un ciclu complet de configurare.






FAQ
Este plugin-ul conform GDPR din start?
Plugin-ul furnizează toate primitivele tehnice necesare pentru conformitatea GDPR: consimțământ prealabil, categorii granulare, un buton de refuz la fel de proeminent, retragere ușoară a consimțământului și un log rezistent la manipulare. Conformitatea este o proprietate a modului în care îl configurezi: trebuie să înregistrezi în continuare fiecare script terț în tabul Blocare script-uri, să scrii o politică de confidențialitate exactă și să faci link la ea din banner.
Acoperă CCPA și alte legi de confidențialitate?
Același mecanism — categorii granulare, blocare de script-uri și un dialog de setări care poate fi redeschis — îndeplinește cerința CCPA „Do Not Sell”, UK GDPR, LGPD din Brazilia și majoritatea celorlalte legi moderne de confidențialitate. Pentru text de buton specific unei regiuni, poți folosi filtrul ccm_js_settings împreună cu un plugin de geolocație sau te poți baza pe Polyglot pentru variație pe limbă.
Va încetini site-ul?
Nu. Runtime-ul de frontend este un singur fișier JavaScript vanilla (în jur de 12 KB minificat, fără jQuery, fără dependențe externe) încărcat cu defer. Banner-ul este randat într-un singur pas DOM și nu există niciun apel remote la încărcarea paginii.
Funcționează cu plugin-urile de caching?
Da. Banner-ul își citește starea de consimțământ dintr-un cookie first-party și se randează în întregime client-side, deci este compatibil cu cache-urile de pagină completă (WP Rocket, LiteSpeed Cache, W3 Total Cache, Cloudflare APO). Asigură-te că nivelul tău de caching nu îți strip-uiește cookie-ul de consimțământ.
Cum se integrează cu Google Tag Manager?
Sunt suportate două pattern-uri. Cel mai simplu este să adaugi googletagmanager.com în tabul Blocare script-uri și să-l atribui categoriei Analitice sau Marketing — GTM-ul însuși nu se va încărca până când nu se acordă consimțământul. Pattern-ul mai flexibil este să lași GTM-ul să se încarce necondiționat și să gate-uiești tag-urile individuale în interiorul GTM folosind evenimentul ccm:consent-updated ca trigger.
Pot traduce banner-ul?
Da. Plugin-ul este complet internaționalizat; text domain-ul este cookie-consent, iar fișierele .pot se află în folderul languages. Dacă ai plugin-ul Polyglot instalat, string-urile banner-ului sunt preluate automat și traduse pentru fiecare limbă activă. Poți, de asemenea, să suprascrii textul per pagină prin filtrul ccm_js_settings.
Cât timp este stocat consimțământul?
Pentru numărul de zile configurat în Generale → Expirare cookie. Default-ul este 365 de zile. Când cookie-ul expiră, banner-ul reapare și vizitatorul trebuie să-și dea consimțământul din nou.
Stochează plugin-ul date personale?
Log-ul de consimțăminte stochează un hash SHA-256 al adresei IP a vizitatorului (niciodată IP-ul brut), string-ul user agent, un timestamp și alegerile per categorie. Nu se păstrează nume, adrese de email sau adrese IP complete. Log-ul este gândit să îndeplinească cerința GDPR de a demonstra că s-a acordat consimțământul.
Pot exporta log-ul de consimțăminte?
Log-ul este stocat într-un tabel WordPress standard ({wp_prefix}ccm_consents) și poate fi exportat cu orice unealtă de bază de date — phpMyAdmin, Adminer, wp db export sau un client SQL. Un export CSV nativ din tabul Statistici este planificat într-un release viitor.
Depanare
Banner-ul nu apare
Banner-ul este afișat automat doar când nu există un cookie ccm_consent în browser-ul vizitatorului. Dacă ai acceptat sau refuzat deja la o vizită anterioară, decizia este memorată pentru Expirarea cookie-ului configurată — de obicei 365 de zile — și banner-ul rămâne ascuns. Pentru a testa de la zero, deschide DevTools în browser, șterge cookie-ul ccm_consent din Application → Cookies și reîncarcă. Ca alternativă non-distructivă, apasă butonul flotant de setări (dacă e activ) și folosește Refuz toate ca să faci să apară banner-ul la următoarea încărcare a paginii, sau apelează CookieConsent.resetConsent() din consola browser-ului.
Script-urile se încarcă în continuare după refuz
Verifică dacă fiecare script de tracking este listat în Blocare script-uri și dacă pattern-ul URL chiar se potrivește. Script-urile inline injectate de temă sau de page builder sunt blocate și ele, dar doar când conținutul lor conține pattern-ul configurat. Folosește tabul Network din DevTools-ul browser-ului pentru a identifica host-ul exact al oricărui request care s-a strecurat, apoi adaugă-l în tabelul Blocare script-uri.
Butonul flotant se suprapune peste alte widget-uri
Dezactivează Afișează butonul flotant din Aspect și adaugă în loc un link <a class="ccm-open-settings">Preferințe cookies</a> în footer. Asta îți dă control total asupra plasării.
Statisticile arată zero consimțăminte
Contoarele incrementează doar când un vizitator apasă un buton al banner-ului. Page views fără interacțiune cu banner-ul nu sunt logate. Dacă vezi zero după lansare, verifică dacă banner-ul chiar se randează și că nu navighezi ca administrator logat pe o pagină unde banner-ul a fost închis anterior.
Textele banner-ului nu sunt traduse
Polyglot trebuie să fie instalat și activ, iar limba țintă trebuie să fie activată în Polyglot → Settings. String-urile banner-ului sunt traduse la primul request după ce o limbă este activată; vizitează o pagină în acea limbă o dată ca administrator pentru a declanșa traducerea.
Setările se resetează după update
Toată configurarea adminului (texte banner, categorii, aspect, traduceri) se află în singura opțiune WordPress ccm_settings. Pattern-urile de blocare a script-urilor sunt în tabelul {wp_prefix}ccm_blocked_scripts. Niciuna nu este atinsă în timpul update-urilor plugin-ului. Dacă vezi resetări, verifică dacă vreun plugin de securitate sau de sincronizare staging suprascrie opțiunile — rareori este chiar plugin-ul de cookie consent.