Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

LW Cookie

GDPR-compliant cookie consent banner for WordPress - minimal footprint, full compliance.

PHP VersionWordPress VersionLicense

LW Cookie Settings

Features

GDPR Compliance

  • Opt-in by default - All optional categories are OFF until user consents
  • Granular category selection - Necessary, Functional, Analytics, Marketing
  • Consent logging - Timestamp and policy version for compliance proof
  • Policy version tracking - Automatic re-consent on policy changes
  • Anonymized IP logging - GDPR-compliant data storage

Cookie Banner

  • Customizable position (top, bottom, modal)
  • Customizable layout (full-width bar, floating box)
  • Customizable colors and border radius
  • Accept All / Reject All / Customize buttons
  • Floating button for easy access to preferences

Script Blocking

Automatic blocking of known tracking scripts until consent:

  • Google Analytics / Google Tag Manager
  • Facebook Pixel
  • Hotjar
  • LinkedIn Insight Tag
  • Twitter/X Pixel
  • TikTok Pixel
  • Microsoft Clarity
  • Pinterest Tag
  • Snapchat Pixel

Content Blocking

Block third-party embeds until consent is given:

  • YouTube videos
  • Vimeo videos
  • Google Maps
  • Other iframes

Cookie Scanner

Detect cookies on your website:

  • Server-side scanning (detects HttpOnly cookies)
  • Deep scan with remote headless browser
  • Cookie Database API integration (2000+ known cookies)
  • Automatic cookie enrichment with provider, purpose, duration

Google Consent Mode v2

  • Built-in support for Google Consent Mode v2
  • Loads at highest priority (before any tracking script)
  • EEA region-specific defaults
  • Required for Google Ads and Analytics in the EU
  • Automatic consent signal updates

Meta Pixel (Facebook) Support

  • Automatic fbq('consent', 'revoke/grant') API calls
  • Works with existing Facebook Pixel implementations

Third-Party Plugin Integration

  • dataLayer.push events for GTM triggers (lw_cookie_consent_update)
  • WordPress filters for querying consent state
  • Script blocking override filter for plugin compatibility

WP-CLI Support

Full command-line management:

wp lw-cookie settings list # List all settings
wp lw-cookie settings set enabled true# Change settings
wp lw-cookie stats # View consent statistics
wp lw-cookie export --format=csv # Export consent logs
wp lw-cookie clear-logs --older-than=365 # Clean up old logs

Installation

Via Composer (Recommended)

composer require lwplugins/lw-cookie

Manual Installation

  1. Download the latest release
  2. Upload the lw-cookie folder to /wp-content/plugins/
  3. Activate the plugin through the 'Plugins' menu
  4. Go to LW Plugins → Cookie to configure

Configuration

Navigate to LW Plugins → Cookie in your WordPress admin to access settings:

TabDescription
GeneralEnable/disable, privacy policy page, policy version
AppearancePosition, layout, colors, border radius
CategoriesCustomize category names and descriptions
TextsBanner title, message, and button labels
AdvancedConsent duration, script blocking, Google Consent Mode

Cookie Categories

CategoryRequiredDescription
NecessaryYesEssential cookies for website function
FunctionalNoEnhanced functionality and personalization
AnalyticsNoVisitor analytics and statistics
MarketingNoAdvertising and remarketing

JavaScript API

// Accept all cookiesLWCookie.acceptAll();// Reject all optional cookiesLWCookie.rejectAll();// Open preferences modalLWCookie.openPreferences();// Get current consent stateconstconsent=LWCookie.getConsent();// { necessary: true, functional: false, analytics: false, marketing: false }// Check if category is allowedif(LWCookie.isAllowed('analytics')){// Load analytics scripts}// Listen for consent changeswindow.addEventListener('lwCookieConsent',function(e){console.log('Categories:',e.detail.categories);console.log('Action:',e.detail.action);});// Delete all cookies (for "forget me" functionality)LWCookie.deleteAllCookies();

WordPress Hooks (PHP)

For third-party plugin integration:

// Get all consent categories$categories = apply_filters( 'lw_cookie_consent_categories', [] );
// ['necessary' => true, 'functional' => false, 'analytics' => true, 'marketing' => false]// Check if user has given any consent$has_consent = apply_filters( 'lw_cookie_has_consent', false );
// Check if specific category is allowed$analytics_ok = apply_filters( 'lw_cookie_is_category_allowed', false, 'analytics' );
// Prevent blocking specific scripts (e.g., if your plugin handles consent)add_filter( 'lw_cookie_should_block_script', function( $should_block, $handle, $src, $category ) {
if ( $handle === 'my-plugin-pixel' ) {
returnfalse; // Don't block, I handle consent myself
}
return$should_block;
}, 10, 4 );

GTM Integration

The plugin pushes events to dataLayer for GTM triggers:

// Fired on every consent change{event: 'lw_cookie_consent_update',lw_cookie_consent: {necessary: true,functional: true,analytics: true,marketing: false},lw_cookie_action: 'customize'// or 'accept_all', 'reject_all'}

Requirements

  • PHP 8.2 or higher
  • WordPress 6.0 or higher

Documentation

Full documentation is available in the docs folder:

Part of LW Plugins

LW Cookie is part of the LW Plugins family - lightweight WordPress plugins with minimal footprint and maximum impact.

PluginDescription
LW SEOEssential SEO features without the bloat
LW DisableDisable WordPress features like comments
LW Site ManagerSite maintenance via AI/REST
LW MembershipsLightweight membership system
LW LMSCourses, lessons, and progress tracking
LW CookieGDPR-compliant cookie consent

License

GPL-2.0-or-later. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Sponsor

Sinann

Supported by Sinann

About

GDPR-compliant cookie consent banner for WordPress — minimal footprint, full compliance

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages