Cookie Consent
Cookie Consent is een volledig aanpasbare, AVG- en CCPA-conforme cookie consent banner voor WordPress. Hij geeft je bezoekers volledige controle over welke cookies en tracking-scripts op je site draaien, organiseert cookies in heldere categorieën, voorkomt dat non-essentiële scripts laden zonder goedkeuring en houdt een tamper-evident consent log bij, zodat je tijdens audits compliance kunt aantonen.
De plugin is lichtgewicht, dependency-free op de frontend, wordt geleverd met een vanilla JavaScript runtime en integreert met de Polyglot-plugin, zodat de banner-teksten automatisch worden vertaald voor elke taal op je site.

Voordelen
- Consent per categorie. Cookies worden out of the box in drie categorieën gegroepeerd: Necessary (altijd actief), Analytical (Google Analytics, Matomo, Hotjar, Mixpanel) en Marketing (Facebook Pixel, LinkedIn Insight, Google Ads).
- Automatische script blocking. Voeg URL-patterns toe voor scripts die geblokkeerd moeten worden tot consent wordt gegeven. Elke pattern is gekoppeld aan een categorie en wordt automatisch gedeblokkeerd zodra de bezoeker opt-int.
- Vijf banner-posities. Kies tussen Bottom Left, Bottom Right, Bottom Center, Top en een gecentreerd Modal.
- Live appearance editor. Configureer primary-, background- en text-colors met een native swatch + hex picker, plus een optionele floating settings button. Een live preview toont wijzigingen voordat je opslaat.
- Consent log en statistieken. Elke consent-beslissing wordt opgeslagen in een aparte tabel. Een ingebouwd dashboard brengt totaal aantal consents, acceptance rates per categorie en een paginerende daily breakdown naar voren.
- Meertalige editor. Kies de taal die je wilt bewerken uit een dropdown in de tabs General en Categories en vertaal elke zichtbare string per locale. Met de optionele Polyglot-plugin geïnstalleerd vult een knop AI Translate automatisch elke doeltaal vanuit de bron.
- Ingebouwde licensing & updates. Voer je licentiesleutel in op de General-tab om one-click automatische updates vanaf de Slotix update-server te activeren — geen handmatige ZIP-uploads nodig.
- Configureerbare cookie-levensduur. De consent cookie kan ingesteld worden om ergens tussen 1 en 730 dagen te verlopen.
- Developer friendly. PHP- en JavaScript-API’s plus een DOM-event
ccm:consent-updatedlaten je integreren met custom themes, plugins en third-party tag managers.
Vereisten
| Component | Minimum versie |
|---|---|
| WordPress | 5.8 (getest tot 7.0) |
| PHP | 7.4 |
| MySQL | 5.7 |
| MariaDB | 10.3 |
De plugin werkt op elk modern theme. Er zijn geen extra libraries, build steps of externe services nodig om de frontend banner te draaien. Polyglot is optioneel; installeer het alleen als je meertalige vertalingen van de banner-teksten nodig hebt.
Installatie
- Download de laatste
cookie-consent.zipvanuit het Slotix plugin portal of je aankoopbevestiging. - Navigeer in WordPress naar Plugins → Nieuwe plugin → Plugin uploaden.
- Selecteer het ZIP-bestand en klik op Nu installeren.
- Klik op Plugin activeren zodra de installatie klaar is.
- Open Instellingen → Cookie Consent om de configuratie te starten. Op een verse install is de banner actief met zinvolle defaults, maar je doet er goed aan elke tab door te lopen voordat je live gaat.
Als alternatief kun je de uitgepakte cookie-consent-map via SFTP naar /wp-content/plugins/ uploaden en de plugin activeren vanuit Plugins → Geïnstalleerde plugins.
Configuratie
Het instellingenscherm is verdeeld over vijf tabs: General, Appearance, Categories, Script Blocking en Statistics. Doorloop ze de eerste keer in volgorde.
General

De General-tab is verdeeld in vier kaarten, van boven naar beneden: License, de picker Editing language, Banner Texts en Global Settings.
License. Plak de licentiesleutel die je in je aankoopbevestigingsmail hebt ontvangen — bijvoorbeeld PILOT-XXXX-XXXX-XXXX-XXXX. Klik op Verify & Save; de plugin neemt contact op met de Slotix update-server, valideert de key tegen je domein en activeert one-click automatische updates vanuit het WordPress Plugins-scherm. Zonder key blijft de plugin werken, maar moet je voor elke release handmatig nieuwe ZIPs uploaden.
Editing language. Een dropdown met de talen die momenteel zijn ingeschakeld op de site (Engels, Italiaans, Spaans, Frans en Duits zijn de defaults). Elk tekstveld eronder wordt per taal opgeslagen — het wisselen van de picker swapt de zichtbare waarden zonder de andere te verliezen. Als de optionele Polyglot-plugin geïnstalleerd en actief is, verschijnt naast de picker een knop Translate with AI; klik erop om de huidige doeltaal automatisch in te vullen vanuit de default-language source.
Banner Texts. Bewoording die aan bezoekers getoond wordt. Elk veld wordt gelokaliseerd op basis van de actieve editing language.
- Banner Title — heading bovenaan de banner; default: “We value your privacy”.
- Banner Description — uitlegparagraaf. Vermeld welke cookies je instelt en link naar de volledige privacy policy. De letterlijke zin “Privacy Policy” binnen de description wordt automatisch omgezet in een link naar de geconfigureerde Privacy Policy URL.
- Accept All Button — default: “Accept all”. Opt de bezoeker in voor elke categorie.
- Decline All Button — default: “Decline all”. Vereist door de AVG om net zo prominent te zijn als Accept All.
- Cookie Settings Button — default: “Cookie settings”. Opent de granulaire consent modal vanuit de banner.
- Accept Selected Button — default: “Accept selected”. Wordt binnen de modal getoond; slaat op wat de bezoeker toggled en sluit de dialog.
Global Settings. Gelden voor alle talen.
- Privacy Policy URL — waar de inline “Privacy Policy”-link in de banner description naar wijst. Accepteert een relatief pad (
/privacy-policy) of een volledige URL. Laat leeg om de link te verbergen. - Cookie Expiry — hoe lang de consent-beslissing wordt onthouden, in dagen. Toegestane waarden: 1 tot 730. De AVG-aanbeveling is 365 dagen; hogere waarden verminderen re-prompts maar kunnen door strenge auditors worden geflagd.
Appearance

De Appearance-tab is georganiseerd in drie secties: Layout, Colors en Preview.
Layout.
- Banner Position — kies Bottom Left, Bottom Right, Bottom Center, Top Bar of Center Modal. Het Center Modal rendert een gecentreerde dialog met een backdrop die interactie met de pagina blokkeert tot er een beslissing is gemaakt; gebruik het alleen wanneer strikte compliance vereist is, omdat het intrusiever is.
- Floating Button — een checkbox. Indien ingeschakeld blijft een klein icoon verankerd in de hoek van de pagina, zodat bezoekers de consent-instellingen op elk moment kunnen heropenen. Vereist in sommige jurisdicties (vooral Italië en Frankrijk).
Colors. Elke rij koppelt een native color swatch aan een hex-input — klikken op de swatch opent de color picker van je operating system, en de hex-waarde blijft in beide richtingen gesynchroniseerd met de swatch.
- Primary Color — gebruikt voor knoppen en toggles in de modal. Kies een kleur die voldoet aan WCAG AA contrast tegen witte tekst.
- Background Color — de achtergrond van banner en modal. Default: wit.
- Text Color — bodytekst. Default: een donkergrijs.
Preview. Een live miniatuur van de banner staat onder de kleurrijen en update real-time terwijl je elders in de admin titels, descriptions, button labels en kleuren wijzigt — zodat je het resultaat kunt verifiëren voor het opslaan.
Categories

Er worden drie categorieën meegeleverd met de plugin. Je kunt ze hernoemen en hun descriptions per taal bewerken. De categorie Necessary is altijd actief en wordt aan bezoekers getoond met een “Always on”-badge in plaats van een toggle — hij kan niet worden uitgeschakeld, noch door de bezoeker worden uitgezet.
- Necessary. Cookies die nodig zijn voor het functioneren van de site — session, authentication, security tokens, taalvoorkeur. Altijd actief.
- Analytical. Statistische cookies die meten hoe bezoekers met de site interacteren. Voorbeelden:
_ga,_gid,_hjSession,mp_*. - Marketing. Cookies die bezoekers tussen sites tracken voor advertising. Voorbeelden:
_fbp,fr,IDE,li_sugr.
Voor elke niet-necessary categorie kun je bewerken:
- Name — getoond als categorie-titel in de settings modal. Gelokaliseerd per editing language.
- Description — getoond onder de titel. Leg in heldere taal uit welke scripts de categorie controleert. Gelokaliseerd per editing language.
- Enabled by default — wanneer aangevinkt start de toggle in de ON-positie zodra een first-time bezoeker de modal opent (hij kan hem nog uitzetten voor het klikken op Accept Selected). Wanneer niet aangevinkt start de toggle OFF.
De Categories-tab respecteert de Editing language-picker bovenaan, zodat je Nederlandse descriptions voor de Nederlandse banner en Engelse descriptions voor de Engelse banner onafhankelijk kunt schrijven. De structurele instellingen (welke categorieën bestaan, of ze verplicht zijn, hun default state) zijn globaal en gedeeld over talen.
Script Blocking

Dit is waar compliance gebeurt. Zonder script blocking is de banner decoratief — bezoekers kunnen cookies weigeren, maar third-party scripts blijven laden.
De tab is verdeeld in een formulier Add New Script Pattern bovenaan en twee tabellen eronder, één voor de categorie Analytical en één voor Marketing.
Het Add-formulier heeft drie velden:
- Name — een leesbaar label dat in de admin-tabellen verschijnt (bijv. “Google Analytics”). Niet zichtbaar voor bezoekers.
- URL Pattern — een case-insensitive substring die wordt vergeleken met de
src-attribuut en de inline body van elk script. Voorbeelden:google-analytics.com,googletagmanager.com,connect.facebook.net,hotjar.com,linkedin.com/insight. - Category — Analytical of Marketing. Het script wordt pas geladen nadat de bezoeker opt-int voor die categorie.
Elke rij in de Analytical / Marketing-tabellen toont de Name, Pattern, een per-rij Status-toggle (enable/disable zonder verwijderen) en een Delete-actie. De plugin bevat een starter-set patterns voor de meest voorkomende analytics- en ad-platforms; review en breid uit op basis van je daadwerkelijke tag manager configuratie.
Patterns worden bij elke page load gematcht. Geblokkeerde scripts krijgen hun type-attribuut herschreven naar text/plain, zodat de browser ze niet uitvoert. Wanneer consent wordt gegeven, lokaliseert de runtime de geblokkeerde tags, herstelt hun type naar text/javascript en re-inject ze, zodat ze onmiddellijk uitgevoerd worden zonder page reload.
Statistics

De Statistics-tab is read-only en is georganiseerd in drie KPI-tiles bovenaan en een paginerende tabel Daily Breakdown eronder.
KPI tiles.
- Total Consents — elke Accept All, Decline All of Accept Selected telt als één record.
- Analytical Accepted — totaal aantal bezoekers dat opt-int voor Analytical, met het acceptance-percentage relatief aan Total Consents.
- Marketing Accepted — hetzelfde voor Marketing.
Daily Breakdown. Een tabel met één rij per kalenderdag waarop minstens één consent-beslissing geregistreerd is, met Date, Total, Analytical en Marketing acceptance counts. De lijst is gesorteerd newest-first en gepagineerd op 15 rijen per pagina; gebruik de navigatieknoppen (« ‹ › ») of typ een paginanummer rechtstreeks in de input om te springen. Rechtsboven staat het totaal aantal dagen.
Gebruik deze getallen om in te schatten hoeveel van je analytics-verkeer je verliest aan consent-weigeringen en om aan auditors aan te tonen dat consent collection werkt.
Gebruik
Zodra geconfigureerd verschijnt de banner automatisch bij het eerste bezoek en nadat de consent cookie verloopt. Er zijn geen shortcodes of template tags nodig.
De settings modal heropenen
Als de floating button uitgeschakeld is, kun je ergens op je site een link toevoegen waarmee bezoekers de instellingen opnieuw kunnen openen. Gebruik een gewone anchor met een class:
<a href="#" class="ccm-open-settings">Cookie preferences</a>Elk element met de class ccm-open-settings opent bij klik de consent modal. Handig voor footer links en account pages.
PHP API
Server-side code kan branchen op consent voordat markup wordt uitgestuurd of scripts ge-enqueued worden:
if ( function_exists( 'cookie_consent' ) && cookie_consent()->public->has_consent( 'analytical' ) ) {
wp_enqueue_script( 'my-analytics', 'https://example.com/analytics.js', array(), null, true );
}Categorieën die door has_consent() worden geaccepteerd zijn de slugs uit de Categories-tab: necessary, analytical, marketing, plus eventuele custom slugs die je hebt toegevoegd.
JavaScript API
De frontend exposeert een CookieConsent-global met een kleine, stabiele 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();Consent change event
De runtime stuurt een DOM-event uit telkens wanneer consent wordt gegeven, geüpdatet of ingetrokken. Luister ernaar om je eigen integraties aan te sturen — bijvoorbeeld om een custom dataLayer event in Google Tag Manager te pushen:
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,
});
});De event-payload spiegelt het object dat door CookieConsent.getConsent() wordt teruggegeven.
Filter hook
PHP-developers kunnen het settings-object dat aan de frontend runtime wordt doorgegeven aanpassen met de filter ccm_js_settings. Handig om tekst per taal of per pagina te overschrijven zonder de database aan te raken:
add_filter( 'ccm_js_settings', function ( $settings ) {
if ( is_page( 'corporate' ) ) {
$settings['title'] = __( 'Corporate cookie policy', 'my-theme' );
}
return $settings;
} );Database-tabellen
Bij activatie maakt de plugin twee tabellen aan in de WordPress-database:
{wp_prefix}ccm_consents— één rij per consent-beslissing, met timestamp, gehasht IP, user agent en de per-categorie boolean-keuzes.{wp_prefix}ccm_blocked_scripts— de script-blocking patterns die in de admin geconfigureerd zijn.
Beide tabellen worden verwijderd door de meegeleverde uninstall.php wanneer de plugin via de WordPress UI verwijderd wordt.
Screenshots
De schermen hieronder illustreren een complete configuratiecyclus.






FAQ
Is de plugin out of the box AVG-conform?
De plugin levert alle technische primitieven die nodig zijn voor AVG-compliance: prior consent, granulaire categorieën, een even prominente reject button, makkelijke intrekking van consent en een tamper-evident log. Compliance is een eigenschap van hoe je de plugin configureert: je moet nog steeds elk third-party script registreren in de Script Blocking-tab, een accurate privacy policy schrijven en daarnaar linken vanaf de banner.
Dekt het CCPA en andere privacy-wetten?
Hetzelfde mechanisme — granulaire categorieën, script blocking en een heropenbare settings dialog — voldoet aan de CCPA “Do Not Sell”-vereiste, de UK GDPR, Brazilië’s LGPD en de meeste andere moderne privacy-wetten. Voor regio-specifieke button-tekst kun je de filter ccm_js_settings gebruiken samen met een geolocation-plugin, of vertrouwen op Polyglot voor variatie op basis van taal.
Vertraagt het mijn site?
Nee. De frontend-runtime is één vanilla JavaScript-bestand (ongeveer 12 KB minified, geen jQuery, geen externe dependencies) geladen met defer. De banner wordt in één enkele DOM-pass gerenderd en er is geen remote call tijdens page load.
Werkt het met caching-plugins?
Ja. De banner leest zijn consent-state uit een first-party cookie en rendert volledig client-side, dus hij is compatibel met full page caches (WP Rocket, LiteSpeed Cache, W3 Total Cache, Cloudflare APO). Zorg dat de consent cookie niet door je caching-layer gestript wordt.
Hoe integreert het met Google Tag Manager?
Er zijn twee ondersteunde patronen. De simpelste is om googletagmanager.com aan de Script Blocking-tab toe te voegen en het aan de categorie Analytical of Marketing toe te wijzen — GTM zelf laadt dan niet tot consent is gegeven. Het flexibelere patroon is om GTM onvoorwaardelijk te laten laden en individuele tags binnen GTM te gaten met het event ccm:consent-updated als trigger.
Kan ik de banner vertalen?
Ja. De plugin is volledig geïnternationaliseerd; het text domain is cookie-consent en .pot-bestanden staan in de map languages. Heb je de Polyglot-plugin geïnstalleerd, dan worden banner-strings automatisch opgepikt en voor elke actieve taal vertaald. Je kunt ook tekst per pagina overschrijven via de filter ccm_js_settings.
Hoelang wordt consent bewaard?
Voor het aantal dagen dat je configureert onder General → Cookie expiry. De default is 365 dagen. Wanneer de cookie verloopt verschijnt de banner opnieuw en moet de bezoeker opnieuw consent geven.
Slaat de plugin persoonlijke data op?
Het consent log slaat een SHA-256 hash van het IP-adres van de bezoeker op (nooit het ruwe IP), de user agent string, een timestamp en de keuzes per categorie. Er worden geen namen, e-mailadressen of volledige IP-adressen bewaard. Het log is bedoeld om aan de AVG-vereiste te voldoen dat je kunt aantonen dat consent is gegeven.
Kan ik het consent log exporteren?
Het log is opgeslagen in een standaard WordPress-tabel ({wp_prefix}ccm_consents) en kan met elk databasetool worden geëxporteerd — phpMyAdmin, Adminer, wp db export of een SQL-client. Een native CSV-export vanuit de Statistics-tab staat op de roadmap voor een toekomstige release.
Troubleshooting
De banner verschijnt niet
De banner wordt alleen automatisch getoond wanneer er geen ccm_consent-cookie in de browser van de bezoeker staat. Heb je in een eerdere visit al geaccepteerd of geweigerd, dan wordt de beslissing onthouden voor de geconfigureerde Cookie Expiry — meestal 365 dagen — en blijft de banner verborgen. Om vanaf nul te testen, open de DevTools van je browser, verwijder de ccm_consent-cookie onder Application → Cookies en herlaad. Als niet-destructief alternatief klik je op de floating settings button (indien ingeschakeld) en gebruik Decline all om de banner bij de volgende page load tevoorschijn te halen, of roep CookieConsent.resetConsent() aan vanuit de browser console.
Scripts laden nog steeds na weigering
Verifieer dat elk tracking-script onder Script Blocking vermeld staat en dat de URL-pattern daadwerkelijk matcht. Inline scripts die door theme of page builders geïnjecteerd worden, worden ook geblokkeerd, maar alleen wanneer hun inhoud de geconfigureerde pattern bevat. Gebruik de Network-tab van de browser-DevTools om de exacte host van elke request te identificeren die er doorheen glipte, en voeg die toe aan de Script Blocking-tabel.
Floating button overlapt andere widgets
Schakel Show floating button onder Appearance uit en voeg in plaats daarvan een link <a class="ccm-open-settings">Cookie preferences</a> aan je footer toe. Dit geeft je volledige controle over de plaatsing.
Statistics tonen nul consents
Counters lopen alleen op wanneer een bezoeker op een banner-knop klikt. Page views zonder banner-interactie worden niet gelogd. Zie je nul na launch, controleer dan of de banner daadwerkelijk gerenderd wordt en dat je niet bladert als ingelogde administrator op een pagina waar de banner eerder is weggeklikt.
Banner-teksten worden niet vertaald
Polyglot moet geïnstalleerd en geactiveerd zijn en de doeltaal moet ingeschakeld zijn in Polyglot → Settings. De banner-strings worden bij het eerste request vertaald nadat een taal is ingeschakeld; bezoek een pagina in die taal één keer als administrator om de vertaling te triggeren.
Instellingen resetten na update
Alle admin-configuratie (banner-teksten, categorieën, appearance, vertalingen) zit in de enkele WordPress-option ccm_settings. Script-blocking patterns zitten in de tabel {wp_prefix}ccm_blocked_scripts. Geen van beide wordt aangeraakt tijdens plugin-updates. Zie je resets, check dan of een security- of staging-sync-plugin opties overschrijft — dit is zelden de cookie-consent-plugin zelf.