{"id":333142,"date":"2026-07-04T15:54:40","date_gmt":"2026-07-04T15:54:40","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cookiekita-gdpr-consent-cookie-banner\/"},"modified":"2026-08-21T08:11:04","modified_gmt":"2026-08-21T08:11:04","slug":"cookiekita-gdpr-consent-cookie-banner","status":"publish","type":"plugin","link":"https:\/\/he.wordpress.org\/plugins\/cookiekita-gdpr-consent-cookie-banner\/","author":17610836,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.0.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"CookieKita \u2014 GDPR Consent & Cookie Banner","header_author":"CookieKita","header_description":"GDPR-compliant cookie consent banner, DSAR auto-handling, cookie declaration and WooCommerce integration. Powered by CookieKita SaaS.","assets_banners_color":"6b47ce","last_updated":"2026-08-21 08:11:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/cookiekita.com\/wordpress-plugin","header_author_uri":"https:\/\/cookiekita.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":324,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.14":{"tag":"1.0.14","author":"wpsupporting","date":"2026-07-18 18:17:51"},"1.0.15":{"tag":"1.0.15","author":"wpsupporting","date":"2026-07-24 04:48:58"},"1.0.8":{"tag":"1.0.8","author":"gdimitrov","date":"2026-07-04 15:54:13"},"1.1.0":{"tag":"1.1.0","author":"wpsupporting","date":"2026-08-19 04:25:20"},"1.1.1":{"tag":"1.1.1","author":"wpsupporting","date":"2026-08-21 08:11:04"}},"upgrade_notice":{"1.1.1":"<p>Delivers banner.js updates to visitors immediately by no longer pinning a plugin-version cache-buster to the remote script.<\/p>","1.1.0":"<p>The accessibility toolbar is now customizable from your CookieKita dashboard \u2014 colours, corner, and which controls appear.<\/p>","1.0.0":"<p>First public release of CookieKita for WordPress.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3596075,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3596075,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3596075,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3596075,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.14","1.0.15","1.0.8","1.1.0","1.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Cookie consent banner on the front-end.","2":"Integrations directory with the consent-aware tag installer.","3":"Settings \u2014 tracker blocking and WooCommerce eCommerce tracking.","4":"Diagnostics \u2014 connection status and technical details.","5":"DSAR submission form via shortcode."}},"plugin_section":[],"plugin_tags":[223629,20272,16626,190172,131785],"plugin_category":[],"plugin_contributors":[270093],"plugin_business_model":[],"class_list":["post-333142","plugin","type-plugin","status-publish","hentry","plugin_tags-consent-mode","plugin_tags-cookie-banner","plugin_tags-cookie-consent","plugin_tags-dsar","plugin_tags-gdpr","plugin_contributors-gdimitrov","plugin_committers-gdimitrov","plugin_committers-wpsupporting","plugin_support_reps-wpsupporting"],"banners":{"banner":"https:\/\/ps.w.org\/cookiekita-gdpr-consent-cookie-banner\/assets\/banner-772x250.png?rev=3596075","banner_2x":"https:\/\/ps.w.org\/cookiekita-gdpr-consent-cookie-banner\/assets\/banner-1544x500.png?rev=3596075","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cookiekita-gdpr-consent-cookie-banner\/assets\/icon-128x128.png?rev=3596075","icon_2x":"https:\/\/ps.w.org\/cookiekita-gdpr-consent-cookie-banner\/assets\/icon-256x256.png?rev=3596075","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>CookieKita<\/strong> is the WordPress companion plugin to <a href=\"https:\/\/cookiekita.com\">cookiekita.com<\/a>, a GDPR\/ePrivacy consent management platform. It does the on-site work \u2014 blocking trackers before consent, installing your tags consent-aware, and executing data requests \u2014 while the dashboard handles the consent log, cookie scanner and compliance reporting.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>\ud83c\udf6a <strong>Cookie consent banner<\/strong> \u2014 auto-injects the CookieKita banner, localized to the WordPress site language.<\/li>\n<li>\ud83d\udee1 <strong>Real tracker blocking<\/strong> \u2014 holds back Google Analytics, Google Tag Manager, Meta Pixel, Hotjar, Clarity, LinkedIn, TikTok and 30+ other services until the visitor consents. A banner that only <em>shows<\/em> without blocking is not compliant \u2014 CookieKita actually blocks.<\/li>\n<li>\ud83d\udd0c <strong>Integrations directory<\/strong> \u2014 a catalogue of 37 recognised services, each auto-blocked and mapped to the right consent category.<\/li>\n<li>\u26a1 <strong>Consent-aware tag installer<\/strong> \u2014 paste your GA4 \/ Meta Pixel \/ GTM (and many more) ID and CookieKita installs the official tag for you as a <em>blocked<\/em> script that only fires after the matching consent. You become the bridge, not just the blocker.<\/li>\n<li>\ud83d\uded2 <strong>WooCommerce eCommerce tracking<\/strong> \u2014 automatically sends <code>view_item<\/code>, <code>add_to_cart<\/code>, <code>begin_checkout<\/code> and <code>purchase<\/code> to GA4 \/ Google Tag Manager, your ad pixels (Meta, TikTok, Pinterest, Snap, Reddit) and \u2014 with a conversion label \u2014 Google Ads conversions. Analytics events fire on analytics consent; ad events and Google Ads conversions on marketing consent \u2014 fully consent-gated.<\/li>\n<li>\ud83d\udfe2 <strong>Google Consent Mode v2 &amp; Microsoft UET Consent Mode<\/strong> \u2014 consent signals are forwarded automatically.<\/li>\n<li>\ud83c\udf10 <strong>GPC \/ DNT signals<\/strong> \u2014 honours Global Privacy Control and Do Not Track.<\/li>\n<li>\ud83d\udcca <strong>Cookie declaration shortcode<\/strong> \u2014 <code>[cookiekita_cookies]<\/code> renders a live table of the cookies discovered by the CookieKita scanner.<\/li>\n<li>\ud83d\udce8 <strong>DSAR form shortcode<\/strong> \u2014 <code>[cookiekita_dsar]<\/code> adds a GDPR data-subject-request form to any page.<\/li>\n<li>\ud83e\udd16 <strong>Auto-execute DSAR<\/strong> (opt-in) \u2014 verified deletion\/export requests are executed via the WordPress Personal Data API and WooCommerce privacy hooks, with an audit log.<\/li>\n<li>\u267f <strong>Accessibility toolbar<\/strong> (opt-in) \u2014 a floating comfort\/customization widget (text size, contrast, readable font, big cursor, reading guide and more). Not an ADA\/WCAG compliance claim \u2014 it complements real accessibility work.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A free or paid account at <a href=\"https:\/\/cookiekita.com\">cookiekita.com<\/a>.<\/li>\n<li>Your Site Key (32 hex characters) from the CookieKita dashboard. If you download the plugin from your dashboard, the key is pre-configured for you.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>CookieKita<\/strong> service (<a href=\"https:\/\/cookiekita.com\">cookiekita.com<\/a>) \u2014 it is a companion plugin for that platform and requires a CookieKita account to function. The connection is used for the features below.<\/p>\n\n<p><strong>1. Banner script &amp; configuration<\/strong> \u2014 On every front-end page the plugin loads the consent banner script from <code>https:\/\/cookiekita.com\/banner.js<\/code> and fetches your banner configuration and cookie list from <code>https:\/\/cookiekita.com\/functions\/v1\/<\/code>. Your public Site Key is sent so the correct configuration is returned. No personal data is sent for this.<\/p>\n\n<p><strong>2. Connection \/ heartbeat<\/strong> \u2014 When you save your Site Key (and roughly once a day afterwards) the plugin sends your site URL, plugin version, WordPress version and PHP version to <code>https:\/\/cookiekita.com\/functions\/v1\/verify-wp-site<\/code> so the dashboard can show connection status and register the DSAR webhook. It also checks whether the site was disconnected from the dashboard.<\/p>\n\n<p><strong>3. DSAR webhook<\/strong> \u2014 When auto-execute DSAR is enabled, CookieKita sends signed data-subject requests (containing the requester\u2019s email) to the plugin so they can be fulfilled on your site.<\/p>\n\n<p>By using this plugin you agree to the CookieKita Terms of Service (https:\/\/cookiekita.com\/terms) and Privacy Policy (https:\/\/cookiekita.com\/privacy).<\/p>\n\n<h4>Optional third-party tags (only loaded if you enable them)<\/h4>\n\n<p>CookieKita does not load any of the third-party services below by default. The consent-aware tag installer loads a provider's official script <strong>only when you, the site administrator, enter that provider's ID \/ enable it<\/strong>, and even then the script is held back until the visitor gives the matching consent (analytics or marketing). When a tag fires, the visitor's browser loads the provider's script directly and that provider receives standard analytics\/advertising data (e.g. page views, events, IP address, cookie\/device identifiers) \u2014 what is sent and when is determined by that provider. Review each provider's terms and privacy policy before enabling it:<\/p>\n\n<ul>\n<li>Google (Tag Manager, gtag, GA4) \u2014 googletagmanager.com \u2014 terms: https:\/\/policies.google.com\/terms \u2014 privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li>Meta Pixel (Facebook) \u2014 connect.facebook.net \u2014 terms: https:\/\/www.facebook.com\/legal\/terms\/ \u2014 privacy: https:\/\/www.facebook.com\/privacy\/policy\/<\/li>\n<li>Microsoft Clarity \/ UET \u2014 clarity.ms \u2014 terms: https:\/\/www.microsoft.com\/legal\/terms-of-use \u2014 privacy: https:\/\/privacy.microsoft.com\/privacystatement<\/li>\n<li>TikTok \u2014 analytics.tiktok.com \u2014 terms: https:\/\/www.tiktok.com\/legal\/terms-of-service \u2014 privacy: https:\/\/www.tiktok.com\/legal\/privacy-policy<\/li>\n<li>LinkedIn Insight \u2014 snap.licdn.com \u2014 terms: https:\/\/www.linkedin.com\/legal\/user-agreement \u2014 privacy: https:\/\/www.linkedin.com\/legal\/privacy-policy<\/li>\n<li>X (Twitter) Ads \u2014 static.ads-twitter.com \u2014 terms: https:\/\/legal.twitter.com\/ads-terms.html \u2014 privacy: https:\/\/twitter.com\/en\/privacy<\/li>\n<li>Pinterest Tag \u2014 s.pinimg.com \u2014 terms: https:\/\/policy.pinterest.com\/terms-of-service \u2014 privacy: https:\/\/policy.pinterest.com\/privacy-policy<\/li>\n<li>Snap Pixel \u2014 sc-static.net \u2014 terms: https:\/\/snap.com\/terms \u2014 privacy: https:\/\/snap.com\/privacy\/privacy-policy<\/li>\n<li>Reddit Pixel \u2014 redditstatic.com \u2014 terms: https:\/\/www.redditinc.com\/policies\/user-agreement \u2014 privacy: https:\/\/www.reddit.com\/policies\/privacy-policy<\/li>\n<li>Amazon Ads \u2014 c.amazon-adsystem.com \u2014 terms: https:\/\/www.amazon.com\/gp\/help\/customer\/display.html?nodeId=508088 \u2014 privacy: https:\/\/www.amazon.com\/gp\/help\/customer\/display.html?nodeId=468496<\/li>\n<li>Criteo \u2014 static.criteo.net \u2014 terms: https:\/\/www.criteo.com\/terms-and-conditions\/ \u2014 privacy: https:\/\/www.criteo.com\/privacy\/<\/li>\n<li>Outbrain \u2014 amplify.outbrain.com \u2014 terms: https:\/\/www.outbrain.com\/onyx\/term-of-use\/ \u2014 privacy: https:\/\/www.outbrain.com\/privacy\/<\/li>\n<li>Taboola \u2014 cdn.taboola.com \u2014 terms: https:\/\/policies.taboola.com\/terms-of-service\/ \u2014 privacy: https:\/\/policies.taboola.com\/privacy-policy\/<\/li>\n<li>Hotjar \u2014 static.hotjar.com \u2014 terms: https:\/\/www.hotjar.com\/legal\/policies\/terms-of-service\/ \u2014 privacy: https:\/\/www.hotjar.com\/legal\/policies\/privacy\/<\/li>\n<li>Segment (Twilio) \u2014 cdn.segment.com \u2014 terms: https:\/\/www.twilio.com\/en-us\/legal\/tos \u2014 privacy: https:\/\/www.twilio.com\/en-us\/legal\/privacy<\/li>\n<li>Heap \u2014 cdn.heapanalytics.com \u2014 terms: https:\/\/www.heap.io\/terms \u2014 privacy: https:\/\/www.heap.io\/privacy<\/li>\n<li>Amplitude \u2014 cdn.amplitude.com \u2014 terms: https:\/\/amplitude.com\/terms \u2014 privacy: https:\/\/amplitude.com\/privacy<\/li>\n<li>Mixpanel \u2014 cdn.mxpnl.com \u2014 terms: https:\/\/mixpanel.com\/legal\/terms-of-use\/ \u2014 privacy: https:\/\/mixpanel.com\/legal\/privacy-policy\/<\/li>\n<li>FullStory \u2014 fullstory.com \u2014 terms: https:\/\/www.fullstory.com\/legal\/terms-and-conditions\/ \u2014 privacy: https:\/\/www.fullstory.com\/legal\/privacy-policy\/<\/li>\n<li>Crazy Egg \u2014 script.crazyegg.com \u2014 terms: https:\/\/www.crazyegg.com\/terms \u2014 privacy: https:\/\/www.crazyegg.com\/privacy<\/li>\n<li>Mouseflow \u2014 cdn.mouseflow.com \u2014 terms: https:\/\/mouseflow.com\/legal\/terms\/ \u2014 privacy: https:\/\/mouseflow.com\/legal\/privacy-policy\/<\/li>\n<li>Inspectlet \u2014 cdn.inspectlet.com \u2014 terms: https:\/\/www.inspectlet.com\/terms-of-service \u2014 privacy: https:\/\/www.inspectlet.com\/terms-of-service<\/li>\n<li>Plausible Analytics \u2014 plausible.io \u2014 terms: https:\/\/plausible.io\/terms \u2014 privacy: https:\/\/plausible.io\/privacy<\/li>\n<li>PostHog \u2014 posthog.com \u2014 terms: https:\/\/posthog.com\/terms \u2014 privacy: https:\/\/posthog.com\/privacy<\/li>\n<li>Simple Analytics \u2014 simpleanalyticscdn.com \u2014 terms: https:\/\/www.simpleanalytics.com\/terms \u2014 privacy: https:\/\/www.simpleanalytics.com\/privacy-policy<\/li>\n<li>HubSpot \u2014 js.hs-scripts.com \u2014 terms: https:\/\/legal.hubspot.com\/terms-of-service \u2014 privacy: https:\/\/legal.hubspot.com\/privacy-policy<\/li>\n<li>Intercom \u2014 widget.intercom.io \u2014 terms: https:\/\/www.intercom.com\/legal\/terms-and-policies \u2014 privacy: https:\/\/www.intercom.com\/legal\/privacy<\/li>\n<li>Drift \u2014 js.driftt.com \u2014 terms: https:\/\/www.drift.com\/terms-of-service\/ \u2014 privacy: https:\/\/www.drift.com\/privacy-policy\/<\/li>\n<li>Crisp \u2014 client.crisp.chat \u2014 terms: https:\/\/crisp.chat\/en\/terms\/ \u2014 privacy: https:\/\/crisp.chat\/en\/privacy\/<\/li>\n<li>Tawk.to \u2014 embed.tawk.to \u2014 terms: https:\/\/www.tawk.to\/terms-of-service\/ \u2014 privacy: https:\/\/www.tawk.to\/privacy-policy\/<\/li>\n<li>LiveChat \u2014 cdn.livechatinc.com \u2014 terms: https:\/\/www.livechat.com\/legal\/terms\/ \u2014 privacy: https:\/\/www.livechat.com\/legal\/privacy-policy\/<\/li>\n<li>Zendesk \u2014 static.zdassets.com \u2014 terms: https:\/\/www.zendesk.com\/company\/agreements-and-terms\/master-subscription-agreement\/ \u2014 privacy: https:\/\/www.zendesk.com\/company\/agreements-and-terms\/privacy-notice\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install through <strong>Plugins \u2192 Add New<\/strong>, or upload the <code>cookiekita<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Open the <strong>CookieKita<\/strong> menu and paste your Site Key (skipped automatically if you downloaded a pre-configured copy from your dashboard).<\/li>\n<li>(Optional) Activate integrations and paste your tag IDs under <strong>CookieKita \u2192 Integrations<\/strong>.<\/li>\n<li>(Optional) Add <code>[cookiekita_cookies]<\/code> to your Privacy Policy page and <code>[cookiekita_dsar]<\/code> to your Data Requests page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20a%20cookiekita%20account%3F\"><h3>Does this require a CookieKita account?<\/h3><\/dt>\n<dd><p>Yes. CookieKita is a companion plugin for the cookiekita.com platform and needs a Site Key from your account. Core banner, blocking, scanner and DSAR form work on the free plan.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>The banner script is small, async-loaded and CDN-served. The tracker blocker runs a single fast pass per page render.<\/p><\/dd>\n<dt id=\"does%20it%20actually%20block%20trackers%2C%20or%20just%20show%20a%20banner%3F\"><h3>Does it actually block trackers, or just show a banner?<\/h3><\/dt>\n<dd><p>It blocks. Recognised tracking scripts and embeds are held back (rendered as inert, consent-gated scripts) and only execute after the visitor consents to the matching category.<\/p><\/dd>\n<dt id=\"how%20does%20the%20consent-aware%20tag%20installer%20work%3F\"><h3>How does the consent-aware tag installer work?<\/h3><\/dt>\n<dd><p>You paste a service ID (e.g. a GA4 Measurement ID or Meta Pixel ID). The plugin emits the vendor\u2019s official loader as a blocked inline script tied to a consent category, so it fires only after the visitor accepts that category.<\/p><\/dd>\n<dt id=\"is%20dsar%20auto-execution%20safe%3F\"><h3>Is DSAR auto-execution safe?<\/h3><\/dt>\n<dd><p>It is opt-in (off by default), refuses to delete administrator accounts, and records every action to an audit log. Take a backup before enabling.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. It adds consent-gated eCommerce event tracking (view_item, add_to_cart, begin_checkout, purchase) and uses WooCommerce\u2019s privacy hooks for DSAR.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: the banner script (banner.js) was requested with the plugin version as a <code>?ver<\/code> cache-buster. Because banner.js is a remote script that updates independently of the plugin, this could keep browsers on an older cached copy after a banner update until the plugin version changed. The plugin no longer pins a version to it and lets the script's own cache headers govern freshness, so improvements reach visitors right away.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Improved: the accessibility toolbar (Settings \u2192 Accessibility toolbar) is now fully customizable from your CookieKita dashboard \u2014 the floating button's colours and corner, which controls the panel shows and the order they appear in. Existing sites keep the full default set until you change it.<\/li>\n<li>Improved: refreshed toolbar design \u2014 clearer controls with a level indicator on the steppers, proper switches, and a tidy header\/footer.<\/li>\n<li>New: the Accessibility toolbar settings screen now links straight to the dashboard where you customize its appearance.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>New: optional accessibility toolbar (Settings \u2192 Accessibility toolbar). A floating button visitors can open to adjust text size, line height, letter spacing, contrast (dark\/light\/high), a readable font, stop animations, a big cursor, link\/heading highlighting, a reading guide and hide images \u2014 choices are remembered on their device (localStorage), independent of cookie consent since no data leaves the browser. This is a comfort\/customization toolkit, not an ADA\/WCAG compliance claim \u2014 it complements real accessibility work rather than replacing it. Off by default.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Fix: HubSpot's actual analytics beacon (js.hs-analytics.net) was accidentally bundled into the \"HubSpot Forms\" integration's domain list, which silently downgraded it from the correct \"analytics\" consent category to \"preferences\" \u2014 the least strict category. It now stays correctly gated behind analytics consent.<\/li>\n<li>Fix: the Matomo and PostHog custom-URL fields rejected otherwise-valid addresses that included a port number (e.g. a self-hosted Matomo on <code>https:\/\/host:8080\/<\/code>), showing \"does not look right\" for valid input.<\/li>\n<li>Fix: Google Ads \/ Amazon Ads \u2014 the Amazon integration hardcoded the advertiser region to \"EU\", silently breaking attribution for any non-EU Amazon Ads account. A new optional \"Account region (NA \/ EU \/ FE)\" field lets you set the correct one; existing configs keep working unchanged (defaults to EU).<\/li>\n<li>Fix: Criteo was hardcoded to report every single page load as the homepage (\"viewHome\"), making its analytics\/retargeting data wrong on every page except the actual front page. Criteo now gets real, page-aware WooCommerce events \u2014 viewItem on product pages, viewBasket on add-to-cart and checkout, trackTransaction on purchase (de-duplicated per order) \u2014 and \"viewHome\" only fires on the real front page.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>The Integrations tab now shows an \"Extensions\" section with a WooCommerce card, so the WooCommerce eCommerce tracking is discoverable there (it was previously only in Settings). The card shows whether WooCommerce is detected and links straight to its settings.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>New: shared Google tag settings (Settings \u2192 Google tag settings), applied to both the Google Analytics and Google Ads integrations.<\/li>\n<li>New: Google Tag Gateway measurement path \u2014 serve the Google tag first-party from your own domain to reduce ad-blocker loss. Requires a reverse proxy (currently Cloudflare's Tag Gateway); leave blank to load from Google directly.<\/li>\n<li>New: optional url_passthrough (link decoration) toggle, off by default. It stays consent-gated, so it only fires after the visitor consents.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>New: Google Ads conversion tracking for WooCommerce. Add your Purchase \/ Begin-checkout \/ Add-to-cart conversion labels on the Google Ads integration and CookieKita fires the matching <code>gtag('event','conversion', \u2026)<\/code> with value, currency and (for purchases) the order id \u2014 marketing-consent-gated, and de-duplicated per order in the browser. Previously the plugin installed the Google Ads tag but never reported WooCommerce conversions to it.<\/li>\n<li>Diagnostics now recognises Google Ads conversions as a valid destination for eCommerce events.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Fixed WooCommerce eCommerce values serializing as long floats (e.g. <code>19.899999999999999<\/code>) on hosts with <code>serialize_precision = 17<\/code>; monetary values now emit as clean two-decimal numbers (<code>19.9<\/code>) to GA4 \/ Tag Manager and the ad pixels.<\/li>\n<li>Purchase events are now de-duplicated in the browser by order id (localStorage) instead of by an order meta flag written at page-render time. The previous approach could permanently suppress a purchase hit when the buyer reached the thank-you page before granting analytics consent; the event now fires exactly once, but only once it is actually allowed to run.<\/li>\n<li>Richer GA4 items: <code>item_category<\/code>, <code>item_brand<\/code> (WooCommerce <code>product_brand<\/code>) and <code>item_variant<\/code> are now included when available, across view_item, add_to_cart, begin_checkout and purchase.<\/li>\n<li>Diagnostics now flags when WooCommerce eCommerce tracking is enabled but no Google Analytics \/ Tag Manager integration is active \u2014 i.e. events are emitted but nothing collects them.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>New (opt-in): \"Also block hand-pasted inline snippets\" under Tracker blocking. The blocker previously only held back external tracker script files (<code>&lt;script src&gt;<\/code>); inline snippets pasted directly into a theme or header (Google Analytics\/GTM config, Meta Pixel <code>fbq<\/code>, and others) ran before consent. When enabled, these inline snippets are rewritten to inert <code>type=\"text\/plain\"<\/code> with the correct consent category (analytics vs. marketing) and only execute after the visitor consents. Benign inline scripts and non-JS blocks (e.g. JSON-LD) are never touched. Off by default \u2014 enable and test your site, as it can affect custom inline scripts.<\/li>\n<li>Connection status is now verified, not just \"a key is stored\". The header badge and Diagnostics reflect three states \u2014 Connected, Key not recognized, and Not connected \u2014 based on the real handshake with CookieKita. A mistyped or wrong-domain Site Key now surfaces as \"Key not recognized\" instead of a misleading \"Connected\". The check reuses the existing hourly heartbeat, so there is no extra request on page load.<\/li>\n<li>Performance: the tracker-blocking output filter now skips the regex entirely on responses with no <code>&lt;script&gt;<\/code> tag.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Admin UI no longer gates any panel behind the account connection. The Settings, Integrations and Shortcodes tabs are now always fully accessible and every option is editable and saved locally at all times \u2014 nothing is hidden or disabled while unconnected. A small, non-blocking hint simply notes that the consent banner goes live on the front-end once the site is connected (the banner script needs the Site Key to load its configuration). This addresses the review concern that locally-implemented features (tracker blocking, tag installer, shortcodes) appeared to be locked behind the service connection.<\/li>\n<li>Removed the last padlock icon from the Integrations activation modal (replaced with a shield), so no \"lock\" iconography remains anywhere in the admin.<\/li>\n<li>Full audit of every third-party terms\/privacy URL in the External services section; refreshed the ones that had moved or now return an error: Criteo (privacy \u2192 \/privacy\/, terms \u2192 \/terms-and-conditions\/), Meta\/Facebook (added trailing slashes so the pages return 200), Taboola (\u2192 policies.taboola.com), Outbrain terms (\u2192 \/onyx\/term-of-use\/), Mouseflow (\u2192 \/legal\/\u2026), Inspectlet (\u2192 \/terms-of-service) and Segment (\u2192 Twilio legal, since Segment's terms\/privacy are now governed by Twilio). All remaining links were verified reachable.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Removed the custom update checker (<code>update_check_enabled<\/code> \/ <code>ajax_check_update<\/code> \/ <code>fetch_latest_version<\/code>) \u2014 updates are handled exclusively through the standard WordPress.org update flow.<\/li>\n<li>Renamed <code>render_lock_gate()<\/code> to <code>render_service_connection_notice()<\/code> and replaced lock-icon UI with a neutral \"connect your account\" prompt. The tabs show a connection prompt because they are managed through the CookieKita external service (Guideline 6), not because features are locked behind a payment or licence.<\/li>\n<li>Removed lock-icon decorations from Integrations \/ Settings \/ Shortcodes tab buttons.<\/li>\n<li>Fixed dead readme URLs: Criteo terms updated; Mouseflow terms\/privacy updated.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>No functional changes. Submitted in response to review R-29Jun26: confirmed that HubSpot (js.hs-scripts.com) and LiveChat (cdn.livechatinc.com) are fully documented in the External services section, including terms and privacy links. The privacy link for HubSpot (legal.hubspot.com\/privacy-policy) is their official URL; the timeout reported by the automated checker is caused by HubSpot's CDN anti-bot protection on their legal subdomain, not an invalid URL.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Branded the \"Connect to CookieKita\" button to match the CookieKita visual style.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed \"Connection could not be completed\" \u2014 the connect state token is now shared across all Connect buttons on the page instead of being regenerated per button.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>The admin now lands on the Connection tab first when the site is not yet connected (all tabs remain accessible).<\/li>\n<li>Updated the brand logo in the admin header.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Text domain now matches the plugin slug (<code>cookiekita-gdpr-consent-cookie-banner<\/code>) so the plugin is translatable via the directory.<\/li>\n<li>Admin notice-hiding CSS is enqueued via <code>wp_add_inline_style<\/code> instead of an inline <code>&lt;style&gt;<\/code> echo.<\/li>\n<li>Public <code>\/ping<\/code> endpoint no longer exposes configuration state, feature flags or secret status \u2014 it returns only a minimal reachability response.<\/li>\n<li>The tracker-blocking output buffer is now explicitly closed (paired <code>ob_start<\/code>\/<code>ob_end_flush<\/code>).<\/li>\n<li>Removed an unnecessary <code>require<\/code> of a WordPress core admin file in the DSAR exporter path.<\/li>\n<li>Documented all optional third-party tag services (with terms\/privacy links) in the External services section.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security hardening: proof-of-possession required to disconnect, stronger DSAR deletion guard (super-admins), reduced anonymous info in the health endpoint, and a hardcoded update link.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Cookie consent banner with real tracker blocking (37+ services) until consent.<\/li>\n<li>Integrations directory + consent-aware tag installer (GA4, GTM, Meta Pixel, and more).<\/li>\n<li>WooCommerce eCommerce events (view_item, add_to_cart, begin_checkout, purchase), fully consent-gated.<\/li>\n<li>Google Consent Mode v2 + Microsoft UET Consent Mode, GPC\/DNT signals.<\/li>\n<li>Cookie declaration and DSAR shortcodes, with optional auto-execution of verified requests.<\/li>\n<li>One-click \"Connect to CookieKita\" onboarding, with manual Site Key entry as a fallback.<\/li>\n<\/ul>","raw_excerpt":"GDPR cookie consent banner with real tracker blocking, Google Consent Mode v2, consent-aware tag installer, DSAR handling and WooCommerce tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/333142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=333142"}],"author":[{"embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gdimitrov"}],"wp:attachment":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=333142"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=333142"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=333142"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=333142"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=333142"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=333142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}