{"id":289650,"date":"2026-03-19T17:28:00","date_gmt":"2026-03-19T17:28:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kansleri-cookie-consent\/"},"modified":"2026-05-19T15:39:44","modified_gmt":"2026-05-19T15:39:44","slug":"kansleri-cookie-consent","status":"publish","type":"plugin","link":"https:\/\/en-ca.wordpress.org\/plugins\/kansleri-cookie-consent\/","author":23464912,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.0","stable_tag":"1.6.0","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Kansleri Cookie Consent","header_author":"Kansleri.fi","header_description":"Free, no-ads GDPR cookie consent with script blocking, consent logging, Google Consent Mode v2, and AI-assisted setup. Perfect for personal sites and small businesses.","assets_banners_color":"f0f0f1","last_updated":"2026-05-19 15:39:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/kansleri.fi","rating":5,"author_block_rating":0,"active_installs":200,"downloads":1278,"num_ratings":3,"support_threads":3,"support_threads_resolved":2,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tapiokansleri","date":"2026-03-19 17:28:00"},"1.1.0":{"tag":"1.1.0","author":"tapiokansleri","date":"2026-03-20 10:52:10"},"1.2.0":{"tag":"1.2.0","author":"tapiokansleri","date":"2026-03-21 11:55:13"},"1.2.1":{"tag":"1.2.1","author":"tapiokansleri","date":"2026-03-21 12:02:05"},"1.3.0":{"tag":"1.3.0","author":"tapiokansleri","date":"2026-03-25 15:28:16"},"1.4.0":{"tag":"1.4.0","author":"tapiokansleri","date":"2026-04-22 13:43:57"},"1.5.0":{"tag":"1.5.0","author":"tapiokansleri","date":"2026-04-28 08:52:23"},"1.5.1":{"tag":"1.5.1","author":"tapiokansleri","date":"2026-04-28 11:18:59"},"1.6.0":{"tag":"1.6.0","author":"tapiokansleri","date":"2026-05-19 15:39:44"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3491024,"resolution":"128x128","location":"assets","locale":"","width":142,"height":142},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3491024,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3487063,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3487063,"resolution":"772x250","location":"assets","locale":"","width":722,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0","1.2.1","1.3.0","1.4.0","1.5.0","1.5.1","1.6.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3486721,"resolution":"1","location":"assets","locale":"","width":1280,"height":437},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3486721,"resolution":"2","location":"assets","locale":"","width":977,"height":939},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3486721,"resolution":"3","location":"assets","locale":"","width":977,"height":716},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3486721,"resolution":"4","location":"assets","locale":"","width":968,"height":584},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3486721,"resolution":"5","location":"assets","locale":"","width":1007,"height":536},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3486721,"resolution":"6","location":"assets","locale":"","width":984,"height":885},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3486721,"resolution":"7","location":"assets","locale":"","width":986,"height":755},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3486721,"resolution":"8","location":"assets","locale":"","width":941,"height":256}},"screenshots":{"1":"Cookie consent banner on the frontend (bottom bar style)","2":"General settings \u2014 customize banner style, colors, typography, and button texts","3":"Cookies tab \u2014 scan your site, auto-detect cookies, and use AI to generate descriptions","4":"Policy Page tab \u2014 select your policy page and generate a complete privacy policy with one AI prompt","5":"Integration tab \u2014 Google Consent Mode v2 and Site Kit \/ WP Consent API status","6":"Script Blocking tab \u2014 auto-detected third-party scripts blocked before consent","7":"Statistics tab \u2014 consent response summary with accept, reject, and custom breakdown","8":"Consent Log \u2014 anonymized per-visitor audit trail with CSV export","9":"Blocked YouTube embed showing the video thumbnail with an \"Accept marketing cookies\" button before consent"}},"plugin_section":[],"plugin_tags":[20272,16626,131785,234433,396],"plugin_category":[54],"plugin_contributors":[258595],"plugin_business_model":[],"class_list":["post-289650","plugin","type-plugin","status-publish","hentry","plugin_tags-cookie-banner","plugin_tags-cookie-consent","plugin_tags-gdpr","plugin_tags-google-consent-mode","plugin_tags-privacy","plugin_category-security-and-spam-protection","plugin_contributors-tapiokansleri","plugin_committers-tapiokansleri"],"banners":{"banner":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/banner-772x250.png?rev=3487063","banner_2x":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/banner-1544x500.png?rev=3487063","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/icon-128x128.png?rev=3491024","icon_2x":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/icon-256x256.png?rev=3491024","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-1.png?rev=3486721","caption":"Cookie consent banner on the frontend (bottom bar style)"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-2.png?rev=3486721","caption":"General settings \u2014 customize banner style, colors, typography, and button texts"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-3.png?rev=3486721","caption":"Cookies tab \u2014 scan your site, auto-detect cookies, and use AI to generate descriptions"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-4.png?rev=3486721","caption":"Policy Page tab \u2014 select your policy page and generate a complete privacy policy with one AI prompt"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-5.png?rev=3486721","caption":"Integration tab \u2014 Google Consent Mode v2 and Site Kit \/ WP Consent API status"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-6.png?rev=3486721","caption":"Script Blocking tab \u2014 auto-detected third-party scripts blocked before consent"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-7.png?rev=3486721","caption":"Statistics tab \u2014 consent response summary with accept, reject, and custom breakdown"},{"src":"https:\/\/ps.w.org\/kansleri-cookie-consent\/assets\/screenshot-8.png?rev=3486721","caption":"Consent Log \u2014 anonymized per-visitor audit trail with CSV export"}],"raw_content":"<!--section=description-->\n<p>Kansleri Cookie Consent is a free, lightweight, and easy-to-use WordPress cookie consent plugin. There are no ads, no pro version, and no upsells. It is perfect for personal websites, small businesses, and hobby sites who want no-hassle cookie consent.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Three banner styles: bottom bar, centered modal, corner popup<\/li>\n<li>Customizable colors, texts, and button labels<\/li>\n<li>Theme or Plugin typography mode for consistent banner styling<\/li>\n<li>Four consent categories: Necessary, Analytics, Marketing, Preferences<\/li>\n<li><strong>Script auto-blocking<\/strong> \u2014 prevents third-party scripts from running until consent is given<\/li>\n<li><strong>YouTube &amp; Vimeo iframe blocking<\/strong> \u2014 video embeds are blocked until marketing cookies are accepted, with a user-friendly placeholder<\/li>\n<li>Google Consent Mode v2 integration with automatic default\/update signals<\/li>\n<li>GTM dataLayer push on consent changes<\/li>\n<li>Integration tab recommends Google Site Kit (Google's official WordPress plugin) for installing Google Analytics 4 and Google Tag Manager, so Consent Mode v2 signals work out of the box without manual GTM snippet management<\/li>\n<li>Built-in cookie scanner that auto-identifies common cookies (Google Analytics, Meta Pixel, WordPress core, and more)<\/li>\n<li>AI-assisted cookie descriptions \u2014 copy a prompt, paste into an AI tool, import the result<\/li>\n<li><strong>AI-assisted policy page generation<\/strong> \u2014 generate a complete cookie\/privacy policy page with one prompt<\/li>\n<li>Auto-generated cookie policy page with a dynamic shortcode (theme or plugin styling)<\/li>\n<li>Floating settings button for visitors to update preferences (on by default)<\/li>\n<li><code>[kncc_cookie_settings]<\/code> shortcode \u2014 add a cookie settings link anywhere (footer, menu, etc.) with customizable text<\/li>\n<li>\"Edit cookie preferences\" button on the policy page for easy consent withdrawal<\/li>\n<li><strong>Per-user consent logging<\/strong> \u2014 anonymized audit trail for GDPR compliance with CSV export<\/li>\n<li>Consent statistics dashboard (no personal data stored)<\/li>\n<li><strong>Graceful multilingual policy page fallback<\/strong> \u2014 if a language is missing a translated policy page, the banner links to the default-language page instead of a 404<\/li>\n<li>Google Site Kit integration \u2014 auto-detects and avoids duplicate consent signals<\/li>\n<li>WP Consent API integration \u2014 shares consent status with other plugins<\/li>\n<li><strong>Full WPML and Polylang support<\/strong> \u2014 per-language banner texts, cookie descriptions, banner style, colors, and policy page<\/li>\n<li>Finnish translation included with auto-localized defaults<\/li>\n<li>Daily cron check for missing cookie descriptions with admin notifications<\/li>\n<li>Comprehensive documentations tab with installation guide, option explanations, and troubleshooting<\/li>\n<li>Clean uninstall \u2014 removes all data when deleted<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>kansleri-cookie-consent<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install directly through the WordPress plugin screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>Settings &gt; Cookie Consent<\/strong> to configure the banner.<\/li>\n<li>Use the <strong>Cookies<\/strong> tab to scan your site and register cookies.<\/li>\n<li>Publish the auto-created cookie policy page or add the <code>[kncc_cookie_policy]<\/code> shortcode to any page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20support%20google%20consent%20mode%20v2%3F\"><h3>Does this plugin support Google Consent Mode v2?<\/h3><\/dt>\n<dd><p>Yes. When enabled under the Integration tab, the plugin outputs consent defaults in <code>&lt;head&gt;<\/code> before any other scripts, and sends <code>consent update<\/code> signals whenever a visitor changes their preferences. If Google Site Kit is active, duplicate defaults are automatically avoided.<\/p><\/dd>\n<dt id=\"how%20does%20the%20cookie%20scanner%20work%3F\"><h3>How does the cookie scanner work?<\/h3><\/dt>\n<dd><p>The scanner loads your homepage in a hidden iframe, reads all cookies, and matches them against a built-in database of known cookie patterns (Google, Meta, WordPress, etc.). Known cookies are added automatically; unknown cookies are presented for categorization with an AI-assisted workflow.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wpml%20or%20polylang%3F\"><h3>Does it work with WPML or Polylang?<\/h3><\/dt>\n<dd><p>Yes. When WPML or Polylang is active, you can set per-language banner texts, cookie descriptions, banner style, colors, and policy page. Switch to a secondary language in the admin bar and edit the settings. Values not customized for a language fall back to the default language. Cookie names, categories, providers, and durations are shared across all languages.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20google%20site%20kit%3F\"><h3>Does it work with Google Site Kit?<\/h3><\/dt>\n<dd><p>Yes. The plugin detects Site Kit automatically. If Site Kit is managing consent mode defaults, this plugin skips its own default output and only sends consent updates when visitors make a choice. Consent Mode v2 is forced on when Site Kit is active.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wp%20consent%20api%3F\"><h3>Does it work with WP Consent API?<\/h3><\/dt>\n<dd><p>Yes. When the WP Consent API plugin is active, consent status is automatically shared with other plugins that support the API.<\/p><\/dd>\n<dt id=\"how%20are%20consent%20statistics%20tracked%3F\"><h3>How are consent statistics tracked?<\/h3><\/dt>\n<dd><p>Statistics are tracked server-side via lightweight AJAX calls when visitors make a consent choice. No personal data, IP addresses, or tracking cookies are used. Only daily aggregates (accept\/reject\/custom counts) are stored.<\/p><\/dd>\n<dt id=\"does%20it%20block%20youtube%20and%20vimeo%20embeds%3F\"><h3>Does it block YouTube and Vimeo embeds?<\/h3><\/dt>\n<dd><p>Yes. YouTube and Vimeo iframes are automatically blocked until the visitor accepts marketing cookies. A placeholder is shown in place of the video with an \"Accept marketing cookies\" button. If the visitor has already accepted cookies via the consent banner, videos load normally without any placeholder.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20cookie%20settings%20link%20to%20my%20footer%3F\"><h3>How do I add a cookie settings link to my footer?<\/h3><\/dt>\n<dd><p>Use the shortcode <code>[kncc_cookie_settings]<\/code> in any widget, page, or template. You can customize the link text with <code>[kncc_cookie_settings text=\"Manage cookies\"]<\/code>. The shortcode is also shown with a copy button in the plugin settings page.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20plugin%20is%20uninstalled%3F\"><h3>What happens when the plugin is uninstalled?<\/h3><\/dt>\n<dd><p>All plugin options (<code>kncc_settings<\/code>, <code>kncc_cookies<\/code>, <code>kncc_consent_stats<\/code>, <code>kncc_incomplete_cookies<\/code>, <code>kncc_show_activation_notice<\/code>, <code>kncc_defaults_localized<\/code>, <code>kncc_cron_error<\/code>) and the daily cron schedule are removed from the database. The auto-created policy page is not deleted to prevent accidental content loss.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: Empty cookie categories \u2014 when a category (e.g. Marketing) has no registered cookies, the banner can now either hide that category from the customize panel or show it with a locked (disabled) switch. Default is \"Show but lock\" so visitors still see what categories exist while being clearly told nothing is collected. Switch in <strong>Settings \u2192 Cookie Consent \u2192 General \u2192 Empty cookie categories<\/strong>, with live preview.<\/li>\n<li>New: Per-category empty note \u2014 locked empty categories display a small italic note such as \"No marketing cookies are used on this site.\" (translatable per category, so Finnish and other inflected languages get proper wording).<\/li>\n<li>Fixed: WP Consent API integration was non-functional and could break analytics when Google Site Kit Consent Mode was active. The bridge that syncs <code>kncc_consent<\/code> to WP Consent API now loads after the WP Consent API script, so <code>wp_set_consent<\/code> actually runs and dispatches the <code>wp_listen_for_consent_change<\/code> event that consent-aware integrations (Site Kit, Complianz, others) listen for.<\/li>\n<li>Fixed: The plugin now declares itself as an opt-in consent manager via the <code>wp_get_consent_type<\/code> filter. Without this, <code>window.wp_fallback_consent_type<\/code> was empty and Site Kit's Consent Mode JS short-circuited \u2014 leaving <code>analytics_storage<\/code> stuck at <code>denied<\/code> even after visitors accepted analytics cookies. Other consent-aware plugins now also receive correct <code>wp_has_consent()<\/code> results instead of an always-true response. The filter yields to any other plugin that already set the consent type.<\/li>\n<li>Fixed: WP Consent API registration filter used the wrong handle (slug only instead of the full plugin basename), so the plugin appeared as \"not registered\" in Site Health &gt; WP Consent API. Now uses the correct basename.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>New: Documentations tab now ships a Custom CSS template \u2014 every selector the plugin uses, presented as one copy-paste-ready CSS block with a one-click \"Copy CSS template\" button. Uncomment the rules you want to customize, paste into Customizer or your child theme, save.<\/li>\n<li>Improved: Category toggles redesigned with an outlined \"off\" state that tracks the body text color, and an \"on\" knob that tracks the primary text color \u2014 so the on\/off states stay visible at any color combination, including pure-white primary buttons.<\/li>\n<li>Improved: \"Customize\" and \"Close\" link buttons in the banner now have a clear hover state \u2014 subtle background tint with rounded corners and a thicker underline, so the click target is obvious instead of relying only on a small color shift.<\/li>\n<li>Improved: \"Close\" button now uses the body text color so it reads as a quiet dismissal action rather than competing for attention with \"Customize\" and the primary buttons.<\/li>\n<li>Improved: Banner preview's close (\u00d7) icon follows the body text color picker, so it stays visually integrated as the admin tunes the palette.<\/li>\n<li>Removed: \"Border \/ divider\" color picker and the matching divider line in the details panel \u2014 one less rarely-changed setting in the General tab, and a cleaner banner layout.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: Integration tab now recommends Google Site Kit (Google's official WordPress plugin) for adding Google Analytics 4 or Google Tag Manager \u2014 Site Kit handles Consent Mode v2 natively alongside Kansleri, so no manual GTM snippet, script blocking tweaks, or container ID management is needed. A one-click link takes you straight to the Site Kit install page.<\/li>\n<li>New: Cookie scanner filters out \"browser-only\" third-party cookies \u2014 when the scanner sees a tracker cookie (GA, Meta Pixel, HubSpot, LinkedIn, Hotjar, Plausible) but the matching script is not actually in the homepage HTML, the cookie is silently dropped. Fixes false positives on subdomain installs where parent-domain cookies (like <code>_ga<\/code>) bleed into the admin's browser even though this site has no tracker.<\/li>\n<li>New: Live banner preview reworked from a fullscreen lightbox into an in-place floating popup \u2014 the \"Open banner preview\" button sits at the top of the General tab, and clicking it shows the banner in its real position (bar at bottom, modal centered, corner at corner). Colors, text, banner style, and typography updates appear in the preview in real time while the form stays editable behind it.<\/li>\n<li>Improved: Banner preview \"Centered modal\" variant now positions itself in the actual screen center.<\/li>\n<li>Improved: Banner preview Customize button toggles the categories panel like the real frontend banner; the panel starts collapsed.<\/li>\n<li>Improved: Banner preview Necessary-category toggle no longer shows a stray native checkbox alongside the custom toggle UI.<\/li>\n<li>Improved: Banner preview is automatically disabled when Theme style is selected, with a clear notice that Theme style depends on the frontend theme's CSS which doesn't load inside \/wp-admin\/.<\/li>\n<li>Improved: Color picker grid in the General tab \u2014 each color swatch now shows its purpose label (Banner background, Primary button, etc.) above it.<\/li>\n<li>Improved: Blocked YouTube iframe placeholder \u2014 switched from <code>hqdefault.jpg<\/code> (4:3 with baked-in black letterbox bars) to <code>mqdefault.jpg<\/code> (native 16:9), and added defensive resets so theme styles like <code>.entry-content img { margin: 2em 0; border-radius: 4px; }<\/code> no longer leak into the thumbnail and create gaps or rounded edges. A subtle radial gradient keeps the message text and Accept button readable against any thumbnail.<\/li>\n<li>Improved: Iframe placeholder mobile layout \u2014 tighter padding under 600px and <code>box-sizing: border-box<\/code> on the overlay so the message text no longer overflows the right edge on narrow screens.<\/li>\n<li>Improved: Integration tab copy rewritten for non-technical users \u2014 fewer technical terms, clearer recommendations.<\/li>\n<li>Improved: Removed the now-discouraged <code>load_plugin_textdomain()<\/code> call \u2014 translations on translate.wordpress.org are loaded automatically by WordPress core.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: Empty banner text fields fall back to the visitor's locale default at render time \u2014 each language gets its own locale-appropriate defaults (English by default, Finnish only on the Finnish version). Cleared fields stay empty in the database, so the admin can leave a field empty to \"use the default\" without the form filling itself back in on save.<\/li>\n<li>New: Default values shown as placeholders in the admin form so it's obvious what visitors would see if a field is left empty<\/li>\n<li>New: Graceful fallback to default-language policy page when a language is missing its own translation (both Polylang and WPML)<\/li>\n<li>New: Dead policy-page links are no longer rendered \u2014 if the selected page is deleted, trashed, or unpublished, the banner omits the link instead of pointing to a 404<\/li>\n<li>Improved: Admin language notice is clearer \u2014 a warning when editing a secondary language (saves target that language only), and an info notice when editing the default language so the active save target is never ambiguous<\/li>\n<li>Improved: Polylang's \"Show all languages\" admin-bar filter is now treated as the default language, including under Polylang's WPML compatibility mode \u2014 no more misleading \"language: ALL\" warnings<\/li>\n<li>Improved: WPML policy-page resolution now uses the same default-language fallback logic as Polylang, with explicit publish-status checks for every resolved translation<\/li>\n<li>Removed: Admin warning about missing policy-page translations (no longer needed, replaced by the graceful fallback)<\/li>\n<li>Updated: Finnish translations for all new and changed admin strings<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: Policy page style setting \u2014 choose theme or plugin styling for the [kncc_cookie_policy] cookie declaration table<\/li>\n<li>Improved: Cookie policy table is now mobile-responsive \u2014 stacks into card layout on small screens<\/li>\n<li>Improved: Policy page theme mode adapts to dark and light backgrounds<\/li>\n<li>Improved: \"Edit cookie preferences\" button moved to top of policy page<\/li>\n<li>Fixed: Daily cron check not re-scheduling after plugin updates<\/li>\n<li>Updated: Finnish translations<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: Direct file access protection added to uninstall.php<\/li>\n<li>Updated: Finnish translations for documentation tab strings<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Full WPML and Polylang multilingual support \u2014 per-language banner texts, cookie descriptions, banner style, colors, and policy page<\/li>\n<li>New: Per-language cookie descriptions \u2014 cookie structure is shared, only descriptions are translatable<\/li>\n<li>New: AI prompts auto-generate in the current admin language<\/li>\n<li>Improved: Reliable language detection during AJAX saves for Polylang compatibility<\/li>\n<li>Improved: Iframe placeholder sizing \u2014 proper min-height and no overflow on mobile<\/li>\n<li>Improved: Documentation tab with multilingual guide, shortcode reference, and iframe blocking docs<\/li>\n<li>Fixed: Cookie deletion not persisting when saving from a secondary language<\/li>\n<li>Fixed: Scanner result strings showing mixed languages<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: YouTube and Vimeo iframe blocking \u2014 video embeds are blocked until marketing cookies are accepted<\/li>\n<li>New: <code>[kncc_cookie_settings]<\/code> shortcode to add a cookie settings link anywhere (footer, menu, widgets)<\/li>\n<li>New: Shortcode info box with copy button in admin settings<\/li>\n<li>Improved: Page reload on \"Reject all\" to ensure blocked content is properly hidden<\/li>\n<li>Improved: Server-side consent cookie check to avoid unnecessary placeholders for returning visitors<\/li>\n<li>Updated: Finnish translations for all new strings<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Free, no-ads, no-pro-version GDPR cookie consent with script blocking, consent logging, Google Consent Mode v2, and AI-assisted setup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/289650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=289650"}],"author":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tapiokansleri"}],"wp:attachment":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=289650"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=289650"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=289650"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=289650"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=289650"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=289650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}