DB Cookie Manager WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
A totally free cookie manager plugin for Wordpress
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/dadebertolino/db-cookie-manager/releases/download/v3.9.1/db-cookie-manager.zip🇮🇹 Italiano | 🇬🇧 English
🇮🇹 Italiano
Plugin WordPress per la gestione GDPR-compliant dei cookie, con banner multilingua, scanner automatico, registro consensi, generatore di Cookie Policy e integrazione nativa con la WP Consent API.
Sviluppato da Davide Bertolino per uso personale e professionale, rilasciato come open-source (GPL v2+).
Integrazione con DB SEO Manager 1.2.0+: se entrambi i plugin sono installati, la dashboard "Stato GDPR" del SEO Manager riconosce il Cookie Manager (bonus +5 al punteggio), il registro privacy mostra automaticamente i tre trattamenti del Cookie Manager con il badge "Plugin esterno", e l'audit homepage arricchisce ogni host noto con i cookie rilevati dallo scanner. Nessuna configurazione richiesta: l'integrazione è automatica e bidirezionale.
Caratteristiche principali
- Banner cookie multilingua (Italiano, English, Français, Deutsch, Español, Português) con auto-detect dalla lingua del browser
- 5 categorie standard WP Consent API:
functional,preferences,statistics,statistics-anonymous,marketing - Blocco preventivo degli script di tracking (Google Analytics, Meta Pixel, GTM, TikTok, ecc.) e degli iframe (YouTube, Vimeo, Maps, Spotify, ecc.)
- Scanner automatico che visita le pagine principali, parsa i
Set-Cookiee rileva firme di servizi terzi — 64 cookie noti pre-classificati - Cookie Policy generator conforme alle Linee Guida del Garante 10 giugno 2021 (rif. art. 122 D.Lgs. 196/2003 + GDPR)
- Registro consensi GDPR-friendly con IP hashato (irreversibile) e user-agent aggregato — export CSV e JSON con filtri
- API JavaScript pubblica
window.DBCMper integrazioni custom - Integrazione WP Consent API:
wp_has_consent('statistics')risponde correttamente in base al consenso del visitatore - Segnali browser opzionali: rispetta Do Not Track (DNT) e Global Privacy Control (GPC)
- Geo-targeting opzionale: mostra il banner solo a visitatori UE/EEA/UK
- Google Consent Mode v2 (opt-in): comunica il consenso ai tag Google con default negato nel
<head>e update al consenso; mapping personalizzabile viadbcm_gcm_mapping - Localizzazione Google Fonts (opt-in): rimuove i riferimenti remoti a Google Fonts così l'IP dell'utente non viene trasmesso a Google
- Cancellazione reattiva dei cookie: rimuove dal browser i cookie delle categorie non concesse, rendendo effettiva la revoca del consenso
- Placeholder click-to-load accessibile per gli embed bloccati (consenso granulare per singolo contenuto)
- Firme personalizzate: aggiunta manuale di servizi/cookie con import/export JSON
- Report differenziale scanner: evidenzia i cookie nuovi o rimossi tra due scansioni
- Shortcode
[dbcm_preferences]per il pulsante "Modifica preferenze" - Auto-aggiornamento da GitHub via DB GitHub Updater
- Design system condiviso con gli altri plugin DB (
db-admin-ui.css) - Disinstallazione pulita via
uninstall.php
Requisiti
| Componente | Versione minima |
|---|---|
| WordPress | 6.0+ |
| PHP | 7.4+ |
| WP Consent API | (opzionale) — per integrazione automatica con altri plugin compatibili |
Installazione
- Scarica l'ultima release ZIP da GitHub Releases
- WordPress admin → Plugin → Aggiungi nuovo → Carica plugin → seleziona lo ZIP → Installa ora → Attiva
- Vai a Cookie Manager nel menu sidebar
- Configura in ordine: Banner & aspetto → Scanner → Cookie Policy → Avanzate
Gli aggiornamenti successivi arrivano automaticamente via GitHub Updater.
Configurazione consigliata
Per la maggior parte dei siti italiani:
- Banner: layout "Riquadro flottante", posizione "In basso a destra", tema "Auto"
- Default categorie: tutte disattivate (richiesto dal GDPR)
- Durata consenso: 180 giorni (raccomandazione del Garante)
- Scanner: lancia almeno una scansione, poi rivedi i cookie marketing non noti
- Cookie Policy: crea la pagina automaticamente, poi compila
[NOME COMPLETO / RAGIONE SOCIALE]e[INDIRIZZO] - Avanzate: DNT/GPC off per consensi espliciti, on per massima privacy by default
API JavaScript
// Verifica consenso
if (window.DBCM.hasConsent('statistics')) { loadGoogleAnalytics(); }
// Reagisci ai cambi
window.DBCM.onConsent(function(consent, type) {
console.log('Type:', type); // 'accept_all' | 'reject_all' | 'custom'
console.log('Marketing:', consent.marketing);
});
// Apri il modal preferenze
window.DBCM.openPreferences();
// Imposta programmaticamente
window.DBCM.setConsent('marketing', true);
// Mappa completa (null se nessun consenso ancora dato)
var consent = window.DBCM.getConsent();
// Lista canonica delle 5 categorie
console.log(window.DBCM.categories);
Evento DOM alternativo:
document.addEventListener('dbcm:consent', function(ev) {
var consent = ev.detail.consent;
var type = ev.detail.type;
});
Hooks e filtri PHP
Banner
| Hook | Tipo | Note |
|---|---|---|
dbcm_should_render_banner |
filter | Default true — sopprimi il banner su pagine specifiche |
dbcm_banner_translations |
filter | Aggiungi/sovrascrivi traduzioni |
dbcm_visitor_country_code |
filter | Fornisci il codice paese ISO-3166 alpha-2 |
dbcm_eu_country_codes |
filter | Personalizza la lista paesi UE/EEA per il geo-targeting |
Consent
| Hook | Tipo | Note |
|---|---|---|
dbcm_consent_set |
action | Fired ad ogni cambio consenso — args: $type, $consent |
dbcm_consent_propagated |
action | Fired dopo la propagazione a wp_set_consent() |
dbcm_consent_type |
filter | Default 'optin' — sovrascrivi il consent type WP API |
Blocker
| Hook | Tipo | Note |
|---|---|---|
dbcm_blocker_patterns |
filter | Aggiungi/rimuovi pattern di blocco |
dbcm_blocker_placeholder_text |
filter | Testo del placeholder iframe (multilingua) |
dbcm_blocker_placeholder_btn_label |
filter | Label del pulsante del placeholder |
Scanner
| Hook | Tipo | Note |
|---|---|---|
dbcm_known_cookies |
filter | Aggiungi cookie custom al database statico |
dbcm_scan_urls |
filter | Personalizza le URL scansionate |
dbcm_scanner_html_detections |
filter | Aggiungi firme HTML di servizi terzi |
Cookie Policy
| Hook | Tipo | Note |
|---|---|---|
dbcm_policy_sections |
filter | Riordina/rimuovi sezioni |
dbcm_policy_html |
filter | Modifica l'HTML finale |
dbcm_policy_section_* |
filter | Modifica singole sezioni (header, definitions, cookies, external, browser, ecc.) |
Consent Log
| Hook | Tipo | Note |
|---|---|---|
dbcm_trust_proxy_headers |
filter | Default false — fidati di X-Forwarded-For e simili per l'IP |
API server-side per altri plugin
DBCM_Consent_API::has_consent($category) (dalla 3.0.0)
Helper unificato per leggere il consenso. Strategia a 3 livelli: wp_has_consent() se WP Consent API installata, altrimenti cookie diretto, altrimenti false.
DBCM_Scanner::get_cookies_by_provider_keyword($keyword, $limit = 50) (dalla 3.0.2)
Ricerca i cookie scansionati il cui campo provider contiene la keyword (LIKE substring, case-insensitive). Usato da DB SEO Manager 1.2.0+.
if (class_exists('DBCM_Scanner')) {
$cookies = DBCM_Scanner::get_cookies_by_provider_keyword('Google Analytics');
foreach ($cookies as $c) {
echo $c->cookie_name . ' (' . $c->category . ')';
}
}
Esempi pratici
Caricare Google Analytics solo dopo consenso statistics:
add_action('wp_footer', function() {
if (function_exists('wp_has_consent') && wp_has_consent('statistics')) { ?>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXX');
</script>
<?php }
});
Sopprimere il banner su una landing page:
add_filter('dbcm_should_render_banner', function($render) {
if (is_page('landing-newsletter')) return false;
return $render;
});
Aggiungere un cookie custom allo scanner:
add_filter('dbcm_known_cookies', function($cookies) {
$cookies['my_app_session'] = [
'category' => 'functional',
'description' => 'Sessione applicativa interna.',
'duration' => 'Sessione',
'provider' => 'My App',
];
return $cookies;
});
Link "Modifica preferenze" nel footer:
echo do_shortcode('[dbcm_preferences label="Cookie" style="link"]');
FAQ
Il plugin è davvero conforme al GDPR? Fornisce gli strumenti tecnici per la conformità. La conformità completa dipende dalla configurazione e dalle scelte editoriali. Una revisione da DPO o avvocato resta necessaria per rassicurazioni legali.
Posso usarlo con altri consent manager? No — solo uno alla volta. Disattiva l'altro prima.
Funziona in multisite? Sì. Ogni sito ha le proprie option e il proprio log. La disinstallazione è multisite-aware.
Il blocco preventivo rompe il mio sito? Solo se il tema dipende esattamente da uno script di tracking bloccato (raro). Se hai problemi, disabilita "Blocco preventivo" nella pagina Scanner.
Come gestisce IPv6? Hashing SHA256 dell'IP completo (v4 o v6) + salt site-specifico. Irreversibile in pratica.
Posso esportare il log per richieste GDPR? Sì — Registro consensi → Scarica CSV o Scarica JSON, con filtri per tipo e data.
Privacy
Il plugin non comunica con server esterni. Niente telemetria, niente phone-home. L'unica connessione esterna è GitHub Updater per gli aggiornamenti del plugin.
Cookie scritti dal plugin:
| Cookie | Categoria | Durata | Scopo |
|---|---|---|---|
dbcm_consent |
functional | 365 giorni (configurabile) | Memorizza la scelta dell'utente |
Changelog
3.7.0 — Modulo Meta Pixel nativo (2026)
Il plugin che possiede il consenso possiede anche il pixel: nuovo modulo opt-in (Avanzate → Meta Pixel) che emette lo snippet Meta come gate JS, quindi il caricamento di fbevents.js è vincolato per costruzione alla categoria Marketing (Art. 6.1.a) — nessuna race tra CMP e tag di terzi.
- Fire senza reload: check iniziale su
window.DBCM.hasConsent('marketing')(version-aware: un consenso con versione obsoleta non concede) + listener sudbcm:consent. Alla revoca inviafbq('consent','revoke')a runtime (Art. 7.3); la rimozione di_fbpè coperta dalla cancellazione reattiva esistente. - Anti auto-blocco: il gate contiene le stringhe che il blocker matcha sul contenuto inline (
connect.facebook.net,fbevents.js) — nuovo skip esplicitodata-dbcm-ownnel blocker, con test di contratto: il gate passa, un Meta Pixel di terzi (es. Meta for WooCommerce) resta bloccato. - Trasparenza automatica: quando attivo, lo slug
meta-pixelè registrato nei servizi dichiarati (idratato dalla firma: fonte unica di verità) e il trattamento in contitolarità con Meta (Art. 26, DPF) è dichiarato a DB Privacy Hub viadbph_processing_register. Alla firmameta-pixelsi aggiunge il cookie_fbc(click ID). - Handoff CAPI (opt-in): PageView inviato con
eventIDcondiviso esposto inwindow.DBCM_META_LAST_EVENT_ID, per la deduplicazione con la futura Conversions API server-side (DB Meta Events). - Pixel ID validato server-side (solo 15–16 cifre, ri-sanitizzato anche in lettura). Test: +24 unit (modulo 20, contratto blocker 4), validati con mutation testing.
3.6.1 — Firma Facebook per contenuti incorporati (2026)
Chiude un gap di blocco rilevato tramite la nuova pagina Servizi dichiarati: gli embed Facebook via iframe (facebook.com/plugins/… — post, video, like/share button) non erano coperti da alcuna firma né dai pattern del blocker, quindi caricavano prima del consenso (era gestito solo il Meta Pixel via connect.facebook.net). Nuova firma facebook con cookie tipici (fr, datr, sb) e informativa Meta: in cascata sistemano blocco preventivo dell'iframe, placeholder click-to-load, registro dei servizi dichiarati, pick-list e rilevamento scanner. Il caricamento via SDK JS resta attribuito a meta-pixel (nessuna doppia attribuzione). Test: +3 unit di regressione (132 totali).
3.6.0 — Registro dei servizi dichiarati (2026)
Risolve un problema strutturale emerso in audit su caso reale: la Cookie Policy generata elencava solo i cookie tecnici, perché lo scanner acquisisce le pagine via self-request e l'HTML che analizza è già passato dal blocco — gli embed gated (YouTube, Maps, ...) sono già placeholder e le firme non matchano più. Più il blocco funziona, più la policy è incompleta: non giustifica il consenso richiesto dal banner (incoerenza documentale, Art. 5(1)(a)).
- Registrazione automatica al momento del blocco: quando il blocker matcha e riscrive un iframe/script, risolve la src in una firma (
DBCM_Signatures::identify_url(), nuovo) e registra{slug, last_seen}. Evidenza empirica dell'uso reale — niente sovra-dichiarazione dei 42 servizi bundled su siti che non li usano. La self-request dello scanner passa dal blocco, quindi lanciare una scansione popola il registro: circolarità risolta senza alcun bypass (un bypass sarebbe spoofabile = elusione del consenso). Scritture throttled: una per servizio al giorno. - Staleness: le voci auto entrano in policy solo se viste negli ultimi 30 giorni (filtro
dbcm_declared_services_ttl) — embed rimosso, voce che decade da sola. I dettagli (fornitore, cookie tipici, durate, informativa) sono idratati dal DB firme alla generazione: fonte unica di verità. - Nuova sezione in policy "Contenuti incorporati e servizi attivi previo consenso", per categoria, con dicitura "bloccati per impostazione predefinita" e rinvio esplicito alle informative delle terze parti (ammesso dalle Linee Guida Garante 10/06/2021 per cookie non sotto il controllo del titolare).
- Dichiarazione manuale (Cookie Manager → Servizi dichiarati): pick-list dalle firme note (dati precompilati) o form libero per i casi residuali; le voci manuali non scadono e, a parità di servizio, prevalgono su quelle automatiche.
- Validazione di coerenza banner ↔ policy: categorie richieste nel banner senza cookie rilevati né servizi dichiarati generano un avviso in dashboard — copre sia il servizio non documentato sia la richiesta di consenso ingiustificata.
- Integrazione DB Privacy Hub: registro esposto via filtro
dbcm_declared_services_register(consumo da DBPH ≥ 1.4.0, fallback trasparente se assente). - Test: +22 unit (registro 17,
identify_url3, policy 2+1), tutti validati con mutation testing.
3.5.1 — Split di class-admin.php (2026)
Release di manutenzione, zero cambi di comportamento. Il monolite class-admin.php (2.871 righe) è stato spezzato in un guscio comune (menu, dispatcher di salvataggio, render helper, flash notices — 745 righe) più una classe per pagina: Dashboard, Banner, Scanner, Firme, Cookie Policy, Registro consensi, Avanzate (inc/class-admin-page-*.php, ognuna ≤ 510 righe). Refactor meccanico validato con la suite completa prima/dopo (107 unit + 16 integration invariati) e smoke di riflessione sulle classi estratte. Pattern PHPCS dei falsi positivi documentati estesi ai nuovi file (stesso codice, stessa verifica manuale).
3.5.0 — Versioning del consenso (2026)
Il consenso GDPR è specifico e informato rispetto ai trattamenti presentati al momento della scelta (Art. 4(11) + 6(1)(a)): se dopo la raccolta del consenso aggiungi un nuovo tracker o cambi in modo significativo i trattamenti, i consensi già salvati (validi fino a 365 giorni) non coprono le novità. Da questa versione ogni consenso è legato a una versione della configurazione dei trattamenti.
- Contatore manuale (default: 1) con bottone in admin (Banner → Contenuto → Versione del consenso) "Richiedi nuovo consenso a tutti gli utenti". La valutazione di "mutamento significativo delle condizioni del trattamento" (Linee guida Garante 10/6/2021 §5) è un giudizio che spetta al titolare: nessun re-prompt automatico, per evitare l'assuefazione al consenso (consent fatigue) che le stesse linee guida indicano come criticità.
- Mismatch = assenza di consenso (rigoroso): dopo un incremento, i cookie
dbcm_consentcon versione precedente vengono trattati come nessuna scelta — lato client (banner ri-mostrato) e lato server (has_consent()nega; all'hydrate viene propagato un deny esplicito alla WP Consent API, i cui cookie sopravvivrebbero altrimenti al bump). Nessuna pre-selezione delle vecchie scelte nel nuovo banner. - Valore probatorio (Art. 7(1)): il consent log registra la versione in una nuova colonna
consent_version(schema 3, migrazione additiva non distruttiva), valorizzata lato server dal setting — non falsificabile dal client. Esposta nella tabella admin (colonna Ver.), negli export CSV/JSON e nell'integrazione Privacy Hub. Complementare apolicy_version: quella è la versione del documento informativa, questa della configurazione dei trattamenti. - Retrocompatibilità: i cookie pre-3.5.0 (senza campo
cv) valgono come versione 1 — l'aggiornamento del plugin da solo non ri-presenta il banner a nessuno; solo l'incremento esplicito dell'admin lo fa. - Rimossa l'opzione
reconsent_on_change(mai collegata a un comportamento reale): il versioning la sostituisce con un meccanismo effettivo. - Test: +12 unit (validazione
cvinread_cookie/has_consent/hydrate, clamp del setting) e +3 integration (schema 3, valore loggato), tutti validati con mutation testing.
3.4.3 — Segnali di consenso Microsoft (UET + Clarity) (2026)
Due nuovi segnali di consenso, entrambi opt-in e disattivati di default, sul modello di Google Consent Mode v2. Microsoft richiede un segnale di consenso esplicito per i visitatori da SEE, Regno Unito e Svizzera (per Clarity dal 31/10/2025).
Microsoft UET Consent Mode:
- Nuova opzione (Avanzate → Segnali di consenso Microsoft) per i tag UET (Microsoft Advertising / Bing Ads).
- Inietta nel
<head>, prima del tag UET,window.uetq.push('consent','default',{ad_storage:'denied'})— privacy by default, GDPR Art. 25. - Al consenso (categoria Marketing),
banner.jsinvia l'updategranted; alla revoca tornadenied(Art. 7(3): revocare è facile quanto consentire). Mapping personalizzabile via filtrodbcm_uet_mapping.
Microsoft Clarity ConsentV2:
- Segnale
consentv2conad_Storageeanalytics_Storagenegati di default; l'update segue le categorie Marketing e Statistiche. - Scelta conservativa: la categoria Statistiche anonime non è mappata — le registrazioni di sessione di Clarity non sono assimilabili a statistica anonima. Estendibile via filtro
dbcm_clarity_mapping. - Alla revoca Clarity riceve il denied, elimina i propri cookie e prosegue in modalità senza consenso — coerente con la cancellazione reattiva del plugin.
Ambito dichiarato (scope non-TCF):
- DBCM non implementa il framework IAB TCF v2.2: servire annunci personalizzati in SEE/UK con AdSense/Ad Manager/AdMob richiede una CMP certificata da Google e registrata IAB, con ricertificazione annuale — insostenibile per un plugin indipendente. Chi usa AdSense può affiancare la CMP di Google; DBCM copre tutti gli altri scenari di consenso (analytics, marketing, embed, segnali Google e Microsoft).
3.4.2 — Link alle informative dei fornitori (2026)
- Nella tabella cookie della Cookie Policy, il nome del fornitore ora linka la sua informativa privacy quando il fornitore è noto al database firme (trasparenza GDPR Art. 13(1)(e)-(f): informazioni sui destinatari dei dati; completa la colonna "Trasferimento" per le garanzie del Capo V).
- Il matching allinea le due nomenclature interne ("Google Ireland Ltd." nelle firme, "Google Analytics" nello scanner-da-header) con regole conservative: nessun link viene inventato per fornitori ignoti o self-hosted.
- Le firme personalizzate supportano il nuovo campo URL informativa privacy (form admin, import/export JSON); gli URL non
http(s)vengono scartati in salvataggio.
3.4.1 — Aggiornamento Cookie policy (2026)
- Nuova colonna "Trasferimento" che indica i cookie con trasferimento dati extra-UE (USA), con nota sulle garanzie del Capo V GDPR (Clausole Contrattuali Standard / Data Privacy Framework). Rilevamento automatico dei provider USA noti.
3.4.0 — Consent Mode v2, Google Fonts locali e report scanner (2026)
Tre nuove funzionalità orientate alla conformità, tutte opt-in e disattivate di default.
Google Consent Mode v2:
- Nuova opzione (Avanzate → Google Consent Mode v2) che comunica lo stato del consenso ai tag Google (GA4, Google Ads).
- Inietta nel
<head>, il prima possibile, il comandogtag('consent','default',…)con tutti i segnali negati (analytics_storage,ad_storage,ad_user_data,ad_personalization) — privacy by default, GDPR Art. 25. - Al consenso,
banner.jsinviagtag('consent','update',…)con i soli segnali concessi. Mapping categoria→segnale personalizzabile via filtrodbcm_gcm_mapping. - Consigliata la disattivazione se il Consent Mode è già gestito via Google Tag Manager, per evitare doppie inizializzazioni.
Localizzazione Google Fonts:
- Nuova opzione (Avanzate → Google Fonts) che rimuove dall'HTML i riferimenti remoti a
fonts.googleapis.com/fonts.gstatic.com(stylesheet, preconnect, dns-prefetch e@importcorrelati). - Il browser non contatta più i server Google al caricamento della pagina: l'indirizzo IP dell'utente non viene trasmesso (la trasmissione avverrebbe prima di ogni consenso). Rilevante dopo la sentenza del Tribunale di Monaco (gennaio 2022).
- Il sito ripiega sui font di sistema del fallback CSS. L'opzione rimuove i font, non fa self-hosting (download + riscrittura locale).
Report differenziale scanner:
- La pagina Scanner mostra ora una card "Modifiche dall'ultima scansione" con i cookie nuovi e rimossi rispetto alla scansione precedente.
- Utile per l'accountability (GDPR Art. 5.2): evidenzia se un aggiornamento del sito ha introdotto tracker inattesi. Un cookie che cambia categoria è segnalato come rimosso dalla vecchia e aggiunto alla nuova.
- Snapshot leggero salvato in una singola option prima del
TRUNCATE— nessuna nuova tabella.
Correzioni:
- Lo scanner allinea la classificazione al database firme condiviso: i cookie tecnici noti (es.
store_notice*di WooCommerce) non vengono più erroneamente classificati come marketing. Il fallback consultaDBCM_Signaturesprima di ripiegare su marketing.
3.3.0 — Segnali di consenso avanzati (2026)
- Cancellazione reattiva dei cookie: alla revoca del consenso (o al load senza consenso), i cookie delle categorie non concesse vengono rimossi dal browser. Rende la revoca effettiva e non solo formale (GDPR Art. 7.3, 17, 5.1.e). Supporta i wildcard (es.
_ga_*). - UI aggiunta manuale firme: nuova pagina Firme personalizzate per aggiungere servizi e cookie non coperti dal database interno, con pattern di blocco (substring/regex), pulizia reattiva e import/export JSON. Ogni scrittura è sanificata e le regex malformate degradano automaticamente a substring.
- Placeholder click-to-load: gli embed bloccati (YouTube, Maps, ecc.) mostrano un placeholder accessibile (
role="region", navigabile da tastiera) con un pulsante "Carica …" che attiva il singolo contenuto senza scrivere un consenso persistente per l'intera categoria — consenso granulare e puntuale.
3.3.1 — Fix (2026)
- Correzione classificazione
store_notice*(poi consolidata in 3.4.0).
3.2.0 — Linking versione Privacy Policy + filter Hub consensi (2026)
Allineamento con il Privacy Hub 1.3.0 che introduce il Registro consensi unificato.
Linking automatico alla versione Privacy Policy:
- Ogni riga in
wp_dbcm_consent_logora include una colonnapolicy_version BIGINTche memorizza l'ID dello snapshot Privacy Policy in vigore al momento del consenso (letto viaDBPH_Policy_Archive::get_current_version_id()). - Permette di dimostrare in audit "l'utente ha accettato leggendo questa versione del documento" (audit trail completo per art. 7.1 GDPR).
- Senza il Privacy Hub:
policy_version=0, comportamento identico alla 3.1.0 (nessuna regressione).
Filter dbph_consents_register:
- Cookie Manager dichiara la propria fonte di consensi al Privacy Hub via questo filter pubblico. La pagina
Privacy → Registro consensidell'Hub include automaticamente i consensi cookie nella vista unificata. - Callback fornite:
count,query,export. L'Hub gestisce filtri (data range, identificativo, fonte) e produzione CSV.
Schema DB:
- Migrazione
wp_dbcm_consent_logschema 1 → 2: aggiunta colonnapolicy_version+ indice. dbDelta è additivo, dati esistenti preservati. Le righe pre-3.2.0 hannopolicy_version=0(visibili nel registro Hub con label "—").
Compatibilità retroattiva:
- Nessun breaking change. Il plugin funziona identicamente in standalone, con SEO Manager, con Privacy Hub 1.0-1.2.x.
- Privacy Hub 1.3.0+ è raccomandato (non richiesto) per visualizzare il Registro consensi unificato.
3.1.0 — Integrazione DB Privacy Hub (2026)
- Nuovo metodo pubblico
DBCM_Policy_Generator::get_sections()— espone le sezioni della Cookie Policy come array associativo per il riuso da parte del DB Privacy Hub (Privacy Policy unificata) - Sezione "Titolare del trattamento" della Cookie Policy ora legge automaticamente i dati salvati nel DB Privacy Hub (
dbph_titolare_*): se il Privacy Hub è installato e configurato, niente più placeholder da sostituire a mano DBCM_Privacy_Declarationsora si aggancia al filter unificatodbph_processing_registerdel Privacy Hub, mantenendo backward-compat condbseo_processing_register(SEO Manager 1.2.x)- ⚠️ Il filter
dbcm_policy_sectionsora riceve un array associativo (chiavi:header,cookies_used, ecc.) invece che indicizzato — uso interno, breaking solo per filtri custom
3.0.2 — API pubblica scanner e README bilingue (2026)
- Nuovo metodo pubblico
DBCM_Scanner::get_cookies_by_provider_keyword($keyword, $limit = 50) - Modulo
DBCM_Privacy_Declarations: integrazione automatica con DB SEO Manager 1.2.0+ - Sanitizzazione difensiva: keyword min 2 caratteri, hard cap 200 righe
- README bilingue IT/EN con tabelle allineate
3.0.1 — Integrazione registro privacy SEO Manager (2026)
- Modulo
DBCM_Privacy_Declarations: dichiara i tre trattamenti al registro privacy DB SEO Manager 1.2.0+
3.0.0 — Rebuild completo (2026) ⚠️ Breaking change
Riscrittura da zero, non retrocompatibile con 2.x. Svuotare le option dbcm_* e ricreare le tabelle.
- Integrazione WP Consent API nativa — 5 categorie standard (
functional,preferences,statistics,statistics-anonymous,marketing) - Blocker preventivo riallineato: Cloudflare CDN sbloccato, aggiunti TikTok/Pinterest/Bing UET/MS Clarity/Mixpanel/Heap/Amplitude/FullStory/GTM; embed estesi (Instagram, X, Spotify, SoundCloud); placeholder iframe traducibile
- Consent log GDPR-friendly: UA aggregato, IP solo hashato, export JSON oltre a CSV, schema versionato con migrazione just-in-time
- Scanner: schema versionato, HTML detection allineata al blocker, parsing
Set-Cookiecompatibile WP < 6.2 e ≥ 6.2, injection automaticadbcm_consentnelle policy - Cookie database: 64 cookie noti, cookie unmatched →
marketingsafer-by-default,guess_provideresteso a 26 prefix - Policy generator: sezioni modulari filtrabili, riferimento Linee Guida Garante 2021, sezione "Servizi senza cookie"
- Admin UI completa: dashboard + 5 sottopagine, dispatcher centralizzato,
db-admin-ui.css - GitHub Updater integrato,
uninstall.phpcon cleanup completo, shortcode[dbcm_preferences] - DNT/GPC runtime opt-out automatico, geo-targeting opzionale UE/EEA/UK
2.0.1 (2026)
- Fix layout banner "barra": disposizione orizzontale su desktop (testo a sinistra, bottoni a destra)
- Cookie WordPress core (
wordpress_sec_*,wordpress_logged_in_*,wp-settings-*,wordpress_test_cookie) iniettati automaticamente nei risultati della scansione - Rilevamento Google Fonts alternativo via stili registrati WordPress e
theme_mod(fallback per hosting con loopback bloccato) - Fix salvataggio impostazioni: i checkbox non vengono più azzerati salvando da un'altra sezione
- Crediti "Powered by DB Cookie Manager" opzionali nel banner
- Try-catch nell'init JS per debug errori
2.0.0 (2026)
- Banner cookie frontend con 3 layout e tema chiaro/scuro
- Blocco preventivo script con attivazione dinamica
- Placeholder per iframe bloccati
- Registro consensi con export CSV e pulizia automatica
- Sistema multilingua integrato (6 lingue)
- Categoria "Prestazioni" per cookie CDN/caching
- Pagina impostazioni completa con anteprima colori live
- Accessibilità WCAG: ARIA, focus trap, keyboard navigation, reduced motion
1.0.0 (2026)
- Scansione asincrona AJAX
- Database 50+ cookie noti con classificazione automatica
- Generatore Cookie Policy
- Report con modifica manuale
Licenza
GPL v2 o successiva — vedi LICENSE.
Crediti
Sviluppato da Davide Bertolino. Design system db-admin-ui.css condiviso con la suite plugin DB. Riconoscimenti a WP Consent API per lo standard di interoperabilità.
🇬🇧 English
WordPress plugin for GDPR-compliant cookie management, with a multilingual banner, automatic scanner, consent log, Cookie Policy generator, and native WP Consent API integration.
Developed by Davide Bertolino for personal and professional use, released as open-source (GPL v2+).
Integration with DB SEO Manager 1.2.0+: when both plugins are installed, the SEO Manager's "GDPR Status" dashboard recognises Cookie Manager (bonus +5 to score), the privacy register automatically shows the three Cookie Manager treatments with an "External Plugin" badge, and the homepage audit enriches each known host with cookies actually detected by the scanner. No configuration required: the integration is automatic and bidirectional.
Main Features
- Multilingual cookie banner (Italian, English, French, German, Spanish, Portuguese) with auto-detect from browser language
- 5 standard WP Consent API categories:
functional,preferences,statistics,statistics-anonymous,marketing - Preventive blocking of tracking scripts (Google Analytics, Meta Pixel, GTM, TikTok, etc.) and iframes (YouTube, Vimeo, Maps, Spotify, etc.)
- Automatic scanner that visits main pages, parses
Set-Cookieheaders and detects third-party service signatures — 64 pre-classified known cookies - Cookie Policy generator compliant with the Italian DPA Guidelines of 10 June 2021 (ref. art. 122 D.Lgs. 196/2003 + GDPR)
- GDPR-friendly consent log with hashed (irreversible) IP and aggregated user-agent — CSV and JSON export with filters
- Public JavaScript API
window.DBCMfor custom integrations - WP Consent API integration:
wp_has_consent('statistics')responds correctly based on visitor consent - Optional browser signals: respects Do Not Track (DNT) and Global Privacy Control (GPC)
- Optional geo-targeting: shows banner only to EU/EEA/UK visitors
- Google Consent Mode v2 (opt-in): signals consent to Google tags with a denied default in
<head>and update on consent; mapping customisable viadbcm_gcm_mapping - Google Fonts localisation (opt-in): strips remote Google Fonts references so the user's IP is not sent to Google
- Reactive cookie cleanup: removes cookies of non-granted categories from the browser, making consent withdrawal effective
- Accessible click-to-load placeholder for blocked embeds (granular per-embed consent)
- Custom signatures: manually add services/cookies with JSON import/export
- Scanner differential report: highlights cookies added or removed between two scans
- Shortcode
[dbcm_preferences]for a "Manage preferences" button anywhere - Auto-update from GitHub via DB GitHub Updater
- Shared design system with other DB plugins (
db-admin-ui.css) - Clean uninstall via
uninstall.php
Requirements
| Component | Minimum version |
|---|---|
| WordPress | 6.0+ |
| PHP | 7.4+ |
| WP Consent API | (optional) — for automatic integration with other compatible plugins |
Installation
- Download the latest ZIP from GitHub Releases
- WordPress admin → Plugins → Add new → Upload plugin → select ZIP → Install now → Activate
- Go to Cookie Manager in the sidebar menu
- Configure in order: Banner & appearance → Scanner → Cookie Policy → Advanced
Subsequent updates arrive automatically via GitHub Updater.
Recommended Configuration
For most websites:
- Banner: layout "Floating box", position "Bottom right", theme "Auto"
- Default categories: all disabled (required by GDPR)
- Consent duration: 180 days (DPA recommendation)
- Scanner: run at least one scan, then manually review unrecognised marketing cookies
- Cookie Policy: auto-create the page, then fill in
[FULL NAME / COMPANY NAME]and[ADDRESS] - Advanced: DNT/GPC off for explicit consent collection, on for maximum privacy by default
JavaScript API
// Check consent
if (window.DBCM.hasConsent('statistics')) { loadGoogleAnalytics(); }
// React to changes
window.DBCM.onConsent(function(consent, type) {
console.log('Type:', type); // 'accept_all' | 'reject_all' | 'custom'
console.log('Marketing:', consent.marketing);
});
// Open preferences modal
window.DBCM.openPreferences();
// Set programmatically
window.DBCM.setConsent('marketing', true);
// Full map (null if no consent given yet)
var consent = window.DBCM.getConsent();
// Canonical list of 5 categories
console.log(window.DBCM.categories);
Alternative DOM event:
document.addEventListener('dbcm:consent', function(ev) {
var consent = ev.detail.consent;
var type = ev.detail.type;
});
PHP Hooks & Filters
Banner
| Hook | Type | Notes |
|---|---|---|
dbcm_should_render_banner |
filter | Default true — suppress banner on specific pages |
dbcm_banner_translations |
filter | Add/override translations |
dbcm_visitor_country_code |
filter | Supply ISO-3166 alpha-2 country code from MaxMind/GeoIP |
dbcm_eu_country_codes |
filter | Customise EU/EEA country list for geo-targeting |
Consent
| Hook | Type | Notes |
|---|---|---|
dbcm_consent_set |
action | Fired on every consent change — args: $type, $consent |
dbcm_consent_propagated |
action | Fired after propagation to wp_set_consent() |
dbcm_consent_type |
filter | Default 'optin' — override WP API consent type |
Blocker
| Hook | Type | Notes |
|---|---|---|
dbcm_blocker_patterns |
filter | Add/remove blocking patterns |
dbcm_blocker_placeholder_text |
filter | Iframe placeholder text (multilingual) |
dbcm_blocker_placeholder_btn_label |
filter | Placeholder button label |
Scanner
| Hook | Type | Notes |
|---|---|---|
dbcm_known_cookies |
filter | Add custom cookies to the static database |
dbcm_scan_urls |
filter | Customise scanned URLs |
dbcm_scanner_html_detections |
filter | Add HTML signatures of third-party services |
Cookie Policy
| Hook | Type | Notes |
|---|---|---|
dbcm_policy_sections |
filter | Reorder/remove sections |
dbcm_policy_html |
filter | Modify final HTML |
dbcm_policy_section_* |
filter | Modify individual sections (header, definitions, cookies, external, browser, etc.) |
Consent Log
| Hook | Type | Notes
This README is longer than the copy stored here. Read the rest on GitHub →
Releases
22 releases. Each count is every asset in that release; expand a row for the breakdown.
Active-site estimate ≈10 comes from the v3.8.0 cohort. Method.