{"id":347300,"date":"2026-09-15T22:29:49","date_gmt":"2026-09-15T22:29:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-privacy-center\/"},"modified":"2026-09-16T18:50:18","modified_gmt":"2026-09-16T18:50:18","slug":"puregrace-consent-connector","status":"publish","type":"plugin","link":"https:\/\/hy.wordpress.org\/plugins\/puregrace-consent-connector\/","author":23554426,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.0","stable_tag":"1.7.0","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"PureGrace Consent Connector for AI Privacy Center","header_author":"Pure Grace AI, LLC","header_description":"Blocks hardcoded trackers server-side before the browser parses them, and connects your site to the AI Privacy Center consent platform (a service by Pure Grace AI, LLC).","assets_banners_color":"424f6f","last_updated":"2026-09-16 18:50:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/aiprivacycenter.com\/wordpress-cookie-consent\/","header_author_uri":"https:\/\/puregraceai.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":122,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.6.2":{"tag":"1.6.2","author":"puregraceai","date":"2026-09-15 22:29:32","revision":3697757},"1.6.3":{"tag":"1.6.3","author":"puregraceai","date":"2026-09-15 22:54:54","revision":3697766},"1.6.4":{"tag":"1.6.4","author":"puregraceai","date":"2026-09-15 23:15:44","revision":3697775},"1.6.5":{"tag":"1.6.5","author":"puregraceai","date":"2026-09-15 23:31:44","revision":3697784},"1.6.6":{"tag":"1.6.6","author":"puregraceai","date":"2026-09-16 17:06:30","revision":3699036},"1.7.0":{"tag":"1.7.0","author":"puregraceai","date":"2026-09-16 18:50:18","revision":3699144}},"upgrade_notice":{"1.7.0":"<p>Adds links from the settings screen into your AI Privacy Center account. No behavior change and no new network requests.<\/p>","1.6.6":"<p>Documentation only \u2014 no code change.<\/p>","1.6.5":"<p>The settings page now appears under Settings as &quot;AI Privacy Center&quot; rather than &quot;Consent Connector&quot;. Same page, easier to find.<\/p>","1.6.4":"<p>Setup guidance only: a Settings link on the Plugins screen, a getting-started panel, and direct links to where your Widget Key lives. No behavior change.<\/p>","1.6.3":"<p>Fixes double consent banners on sites that still have the older &quot;AI Privacy Center&quot; plugin active. If you see the new notice telling you to delete that plugin, do -- your settings have already been copied across.<\/p>","1.6.2":"<p>Housekeeping only \u2014 no code change.<\/p>","1.6.1":"<p>Documentation only \u2014 no code change.<\/p>","1.6.0":"<p>Plugin renamed and internally re-prefixed. Your existing settings are migrated automatically \u2014 check Settings \u2192 Consent Connector after upgrading to confirm your Widget Key is still shown.<\/p>","1.5.2":"<p>Plugin-header metadata only \u2014 no behavior change. Safe to upgrade any time.<\/p>","1.5.1":"<p>Internal code-quality fixes only (directory-guideline compliance) \u2014 no behavior change. Safe to upgrade any time.<\/p>","1.5.0":"<p>Adds server-side tracker blocking and cache-aware safeguards. After upgrading, purge your cache and verify the banner and blocking while logged out.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3697757,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3697757,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3697757,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3697757,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.2","1.6.3","1.6.4","1.6.5","1.6.6","1.7.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3697757,"resolution":"1","location":"assets","locale":"","width":1533,"height":784},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3697757,"resolution":"2","location":"assets","locale":"","width":1300,"height":723},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3697757,"resolution":"3","location":"assets","locale":"","width":1300,"height":723},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3697757,"resolution":"4","location":"assets","locale":"","width":1568,"height":766}},"screenshots":{"1":"The consent banner on a live site (deny-by-default, WCAG 2.2 AA).","2":"The plugin settings screen \u2014 paste your widget key.","3":"The \"Verify configuration\" check reporting the plugin's current blocking state.","4":"The AI Privacy Center dashboard - plan, connected sites, open privacy requests and setup status."}},"plugin_section":[],"plugin_tags":[166295,20272,16626,131785,4306],"plugin_category":[],"plugin_contributors":[267959,280961],"plugin_business_model":[],"class_list":["post-347300","plugin","type-plugin","status-publish","hentry","plugin_tags-ccpa","plugin_tags-cookie-banner","plugin_tags-cookie-consent","plugin_tags-gdpr","plugin_tags-privacy-policy","plugin_contributors-kevin10676","plugin_contributors-puregraceai","plugin_committers-puregraceai"],"banners":{"banner":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/banner-772x250.png?rev=3697757","banner_2x":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/banner-1544x500.png?rev=3697757","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/icon-128x128.png?rev=3697757","icon_2x":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/icon-256x256.png?rev=3697757","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/screenshot-1.png?rev=3697757","caption":"The consent banner on a live site (deny-by-default, WCAG 2.2 AA)."},{"src":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/screenshot-2.png?rev=3697757","caption":"The plugin settings screen \u2014 paste your widget key."},{"src":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/screenshot-3.png?rev=3697757","caption":"The \"Verify configuration\" check reporting the plugin's current blocking state."},{"src":"https:\/\/ps.w.org\/puregrace-consent-connector\/assets\/screenshot-4.png?rev=3697757","caption":"The AI Privacy Center dashboard - plan, connected sites, open privacy requests and setup status."}],"raw_content":"<!--section=description-->\n<p>PureGrace Consent Connector links your WordPress site to AI Privacy Center, a consent-management service operated by Pure Grace AI, LLC, so your consent banner and your tracker blocking are configured in one place instead of pasted into your theme.<\/p>\n\n<p>Most cookie-consent plugins stop at the popup. This one also does the part a banner cannot: it neutralizes hard-coded tracker scripts <strong>on the server, before the browser parses them<\/strong>, so a tracker physically cannot fire before a visitor consents.<\/p>\n\n<p><strong>How this differs from the cookie-banner plugins already in the directory<\/strong><\/p>\n\n<p>The directory has many consent-banner plugins, so it is fair to ask what this one adds. Two things, and both are structural rather than cosmetic.<\/p>\n\n<p><em>It enforces consent on the server, not in the browser.<\/em> A banner plugin gates trackers with JavaScript after the page has loaded. This plugin rewrites hard-coded tracker tags into inert markup <strong>during page generation, before the HTML leaves your server<\/strong> \u2014 across four tag types: external <code>&lt;script src&gt;<\/code>, inline <code>&lt;script&gt;<\/code> snippets, <code>&lt;img&gt;<\/code> tracking pixels and <code>&lt;iframe&gt;<\/code> embeds. A tracker that is never delivered as an executable tag cannot fire in the gap between page load and banner render, which is the gap browser-only gating cannot close. The transform is idempotent and fails safe: unquoted or unrecognized markup is left untouched rather than mangled.<\/p>\n\n<p><em>It is a connector, not a standalone banner.<\/em> The banner, the consent records and the tracker classification live in AI Privacy Center, an external service. This plugin's job is to bind a WordPress site to that service and to do the server-side enforcement WordPress is uniquely placed to do. It is not a general-purpose cookie banner and is not useful without the service, in the same way an analytics connector is not useful without the analytics account.<\/p>\n\n<p>If you want a self-contained cookie banner with no external account, one of the existing directory plugins will serve you better. This one exists for sites whose consent state is managed centrally across more than one property.<\/p>\n\n<p><strong>What the plugin does<\/strong><\/p>\n\n<ul>\n<li><strong>Consent banner<\/strong> \u2014 enqueues the AI Privacy Center consent banner on your site, deny-by-default and built to WCAG 2.2 AA. Can be switched off if your site already loads the banner another way.<\/li>\n<li><strong>Server-side tracker blocking (prior restraint)<\/strong> \u2014 rewrites hard-coded trackers into inert tags during page generation, before the browser ever parses them, so they cannot run until consent is given. This covers four tracker types: external <code>&lt;script src&gt;<\/code> tags, inline (no-src) <code>&lt;script&gt;<\/code> snippets, tracking <code>&lt;img&gt;<\/code> pixels, and <code>&lt;iframe&gt;<\/code> embeds (YouTube, Vimeo, Maps, social widgets, and similar). This catches server-rendered trackers that browser-only banners miss.<\/li>\n<li><strong>Google Consent Mode signals<\/strong> \u2014 passes consent state to Google tags when enabled.<\/li>\n<li><strong>Cache-aware safeguards<\/strong> \u2014 best-effort purge of known page caches when you save your widget key, plus a notice on the plugin's own screens if an incompatible full-page cache is detected, so you can purge and verify while logged out.<\/li>\n<\/ul>\n\n<p><strong>What it does not do<\/strong><\/p>\n\n<ul>\n<li>It does not modify tags injected into the DOM purely by client-side JavaScript after the page has already loaded (for example a script inserted at runtime by another plugin's own JS) \u2014 the server-side rewrite works on the HTML as generated by WordPress, not on later browser-side DOM changes. The consent banner's own client-side gating still applies to those.<\/li>\n<li>It does not create or edit your privacy policy pages. Policy publishing is done by the platform through WordPress' own REST API with an application password you authorize, so WordPress core performs the permission checks. Nothing in this plugin writes posts or pages.<\/li>\n<li>A full-page cache drop-in can serve pages before plugins load; pages cached while blocking was inactive may serve raw tracker tags until purged. Verify logged out after enabling.<\/li>\n<\/ul>\n\n<p><strong>Honest note on compliance.<\/strong> AI Privacy Center gives you tools and records to help you meet your privacy obligations. It is not a law firm and does not guarantee compliance with any law \u2014 compliance is an outcome of your own process, not a product setting.<\/p>\n\n<p><strong>An account is required.<\/strong> This plugin is the WordPress connector for the AI Privacy Center service. You need an account and a widget key to use it, in the same way an analytics plugin needs a property ID. A free plan is available.<\/p>\n\n<p><strong>No functionality in this plugin is gated behind a paid plan.<\/strong> Everything the plugin's own code does \u2014 the consent banner, and all four kinds of server-side tracker neutralization \u2014 runs on a free account as soon as a widget key is saved. There is no licence check, no tier check, no usage cap and no trial timer anywhere in the plugin. The only condition on tracker blocking is a saved widget key, because the plugin has to know which site's consent state it is enforcing. Paid plans buy additional capability <em>in the hosted service<\/em> \u2014 such as AI-generated policy updates and longer record retention \u2014 none of which is implemented in, or withheld by, this plugin.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on one external service: <strong>AI Privacy Center<\/strong>, a consent-management platform operated by the plugin author, Pure Grace AI, LLC, at <code>https:\/\/app.aiprivacycenter.com<\/code>. The plugin cannot function without it, because the consent banner and the consent records it produces are the service.<\/p>\n\n<p><strong>Nothing is sent until you save a widget key.<\/strong> With the key field empty the plugin makes no outbound request of any kind, from the browser or from your server.<\/p>\n\n<p>Once a key is saved, these requests happen:<\/p>\n\n<ul>\n<li><strong>Consent widget script \u2014 from the visitor's browser, on every page view.<\/strong> The plugin enqueues <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/apc-stub.min.js<\/code>. Loading it sends what any browser request for a script sends: the visitor's IP address, user agent and referring page.<\/li>\n<li><strong>Banner configuration \u2014 from the visitor's browser, on every page view.<\/strong> The widget requests <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/{your-widget-key}\/config<\/code> to learn how your banner is configured. It sends your site's widget key.<\/li>\n<li><strong>Initialization beacon \u2014 from the visitor's browser, once the widget loads.<\/strong> A POST to <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/health-beacon<\/code> containing only your widget key, so the platform can show you whether the banner is actually running.<\/li>\n<li><strong>Consent choices \u2014 from the visitor's browser, when a visitor answers the banner.<\/strong> A POST to <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/consent<\/code> containing your widget key, the consent choices made, how they were made (a banner interaction or a Global Privacy Control signal), and a randomly generated visitor identifier stored in a strictly necessary first-party cookie. That record is what proves consent was given. No name, email address, form content or page content is sent.<\/li>\n<li><strong>Unrecognized tracker hosts \u2014 from your server and from the visitor's browser.<\/strong> When a page contains a script from a host the blocking table does not recognize, its host name (and, from the browser, the script URL's origin and path with any query string stripped) is POSTed to <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/unknown-scripts<\/code> with your widget key, so the unknown tracker can be classified rather than silently ignored. Host names only \u2014 no visitor data and no page content.<\/li>\n<li><strong>Configuration check \u2014 from your server, only when you click a button.<\/strong> Pressing \"Verify configuration\" on the settings screen makes one request to <code>https:\/\/app.aiprivacycenter.com\/api\/v1\/widget\/{your-widget-key}\/config<\/code> to confirm the key is recognized.<\/li>\n<\/ul>\n\n<p><strong>Terms and privacy<\/strong><\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/puregraceai.com\/legal\/tos<\/li>\n<li>Privacy Notice: https:\/\/puregraceai.com\/legal\/privacy<\/li>\n<\/ul>\n\n<p><strong>A note on the tracker host names inside this plugin.<\/strong> <code>includes\/class-pgcc-neutralizer.php<\/code> contains a table of third-party host names \u2014 <code>googletagmanager.com<\/code>, <code>connect.facebook.net<\/code>, <code>maps.googleapis.com<\/code>, <code>widget.intercom.io<\/code> and others. That table is a local pattern list used to <strong>recognize and block<\/strong> those trackers in your page's HTML. The plugin never contacts those hosts and sends them no data; matching a host name in that table is what stops it from loading.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>PureGrace Consent Connector<\/strong>, then <strong>Install Now<\/strong> and <strong>Activate<\/strong>. You can instead upload the plugin folder to <code>\/wp-content\/plugins\/puregrace-consent-connector<\/code>, but installing from the directory means updates arrive automatically.<\/li>\n<li>Create an account at https:\/\/aiprivacycenter.com if you do not have one, and copy the <strong>Widget Key<\/strong> for this website from your dashboard. Each website has its own key.<\/li>\n<li>Go to <strong>Settings \u2192 AI Privacy Center<\/strong> \u2014 there is also a <strong>Settings<\/strong> link on the plugin's own row of the Plugins screen \u2014 paste the Widget Key and save. Nothing is blocked and no banner is shown until a key is saved.<\/li>\n<li>If this site already loads the AI Privacy Center banner another way, such as a theme option or a snippet plugin like WPCode, untick <strong>Inject the consent banner<\/strong> or visitors will see two.<\/li>\n<li>Leave <strong>Google Consent Mode<\/strong> unticked unless you deliberately run Consent Mode. When it is ticked, Google tags are exempted from the server-side blocking and are governed by Consent Mode instead.<\/li>\n<li>Purge any page cache, then use <strong>Verify configuration<\/strong> on the settings screen and load your site <strong>in a private window<\/strong>. A page cached before the plugin was active can keep serving unblocked tracker tags to visitors even though it looks correct to you as an admin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20ai%20privacy%20center%20account%3F\"><h3>Do I need an AI Privacy Center account?<\/h3><\/dt>\n<dd><p>Yes. The plugin is the WordPress connector for the service, and it needs a widget key to know which site's consent state it is enforcing. A free plan is available, and every feature implemented in this plugin \u2014 banner and all server-side tracker blocking \u2014 works on it. Paid plans add capability in the hosted service (for example AI-generated policy updates); nothing in the plugin's own code is switched off by plan.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20a%20normal%20cookie%20banner%20plugin%3F\"><h3>How is this different from a normal cookie banner plugin?<\/h3><\/dt>\n<dd><p>A browser-only banner blocks trackers in the visitor's browser. This plugin also neutralizes hard-coded external tracker scripts on the server, before the page reaches the browser.<\/p><\/dd>\n<dt id=\"does%20it%20block%20every%20tracker%3F\"><h3>Does it block every tracker?<\/h3><\/dt>\n<dd><p>It blocks known hard-coded trackers via server-side rewriting across four tag types \u2014 external <code>&lt;script src&gt;<\/code> tags, inline <code>&lt;script&gt;<\/code> snippets, <code>&lt;img&gt;<\/code> pixels, and <code>&lt;iframe&gt;<\/code> embeds \u2014 plus client-injectable and tagged scripts via the widget. It does not modify tags a page injects client-side after load. See \"What it does not do\" above.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes, with a caveat: a full-page cache can serve pages before plugins load. The plugin purges known caches when you save your key and warns you if it detects an incompatible cache. Always verify logged out after enabling.<\/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 consent widget core is small and served from an edge CDN. The server-side rewrite runs during normal page generation.<\/p><\/dd>\n<dt id=\"does%20this%20make%20my%20site%20legally%20compliant%3F\"><h3>Does this make my site legally compliant?<\/h3><\/dt>\n<dd><p>No plugin can. AI Privacy Center provides tools and records to help you meet your obligations; compliance is an outcome of your own process.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Added a \"Your AI Privacy Center\" panel to the settings screen, linking to the parts of your account this plugin does not handle: websites and scan results, Compliance Watch, privacy requests, generated documents, and unclassified scripts awaiting a decision. The settings screen previously gave no route to any of them.<\/li>\n<li>No new network requests: these are ordinary links, built from the Platform URL already configured on this screen. The plugin makes exactly the same requests as before.<\/li>\n<li>Shown only once a Widget Key is saved.<\/li>\n<\/ul>\n\n<h4>1.6.6<\/h4>\n\n<ul>\n<li>readme correction only, no code change. The Installation steps still sent people to \"Settings \u2192 Consent Connector\", which was renamed in 1.6.5, and said nothing about the two settings that most often go wrong on a first install.<\/li>\n<li>Installation now covers installing from the directory, the Settings link added in 1.6.4, the second-banner case, when to leave Google Consent Mode off, and why a cached page must be checked logged out.<\/li>\n<\/ul>\n\n<h4>1.6.5<\/h4>\n\n<ul>\n<li>The Settings submenu entry is now labelled \"AI Privacy Center\" instead of \"Consent Connector\". The old label carried none of the service name, so operators scanning the Settings menu for the product they signed up for did not find it. Nothing else changed: the page, its URL and all settings are the same.<\/li>\n<\/ul>\n\n<h4>1.6.4<\/h4>\n\n<ul>\n<li>Added a Settings link on the plugin's row of the Plugins screen. There was previously no visible route from activating the plugin to configuring it.<\/li>\n<li>Added a short numbered \"Getting started\" panel to the settings screen, shown only while no Widget Key is saved.<\/li>\n<li>The Widget Key field and the \"no Widget Key\" notice now link straight to the dashboard page the key is copied from, instead of describing where to look.<\/li>\n<li>No change to blocking, the banner, or any stored setting.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Fixed: a site that still had the plugin's predecessor (\"AI Privacy Center\", version 1.5.x and earlier) active alongside this one showed visitors two consent banners. The folder name changed when the plugin was renamed, so WordPress keeps both installed instead of upgrading one to the other. This plugin now detects the older one and does not load its banner until the older one is removed, and says so on its settings screen and the Plugins screen.<\/li>\n<li>Server-side tracker blocking is deliberately not affected by that check and keeps running in both plugins: the rewrite is idempotent, and this version blocks inline scripts, tracking pixels and iframe embeds that 1.5.x did not.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Corrected the Plugin URI header, which pointed at a page that had not been published.<\/li>\n<li>Housekeeping only. No change to plugin behavior.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>readme correction only, no code change. Earlier readme text said script blocking required a paid plan. That was never true of this plugin: the server-side neutralizer runs on any account once a widget key is saved, and the plugin contains no licence, tier, quota or trial logic. The incorrect statements have been removed and replaced with an explicit statement of what is and is not gated.<\/li>\n<li>Added a section explaining how the plugin differs from the consent-banner plugins already in the directory.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Renamed to PureGrace Consent Connector for AI Privacy Center, with the slug <code>puregrace-consent-connector<\/code>.<\/li>\n<li>All functions, classes, constants, options, settings groups and AJAX actions re-prefixed from <code>apc_<\/code> to <code>pgcc_<\/code> to avoid name collisions. Existing settings are migrated automatically on first load after the upgrade; no reconfiguration is needed.<\/li>\n<li>Removed the plugin's custom REST route for publishing policy pages. Policy publishing goes through WordPress core's own REST API, which applies core's per-post permission checks.<\/li>\n<li>The settings screen's JavaScript is now a registered, enqueued file rather than an inline script.<\/li>\n<li>Admin notices are limited to the plugin's own settings screen and the Plugins screen, and the advisory ones are dismissible.<\/li>\n<li>readme now fully documents the external service, what it sends and when, and clarifies that the tracker host names in the blocking table are never contacted.<\/li>\n<li>Tested up to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Added the plugin-header fields the directory expects: Plugin URI, Author URI, Requires at least, Requires PHP, and License URI.<\/li>\n<li>Text Domain corrected to match the plugin slug.<\/li>\n<li>No functional change.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Directory-guideline fixes found by the official Plugin Check tool: widget script now registered\/enqueued via wp_enqueue_script() instead of a raw printed tag, parse_url() calls switched to wp_parse_url(), and a direct-file-access guard added to the neutralizer class.<\/li>\n<li>No functional\/behavioral change for site visitors \u2014 same tracker-blocking logic, same script loaded at the same point in <code>&lt;head&gt;<\/code>.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Server-side neutralization of hard-coded trackers (prior restraint) across scripts, inline snippets, pixels, and iframe embeds.<\/li>\n<li>Cache-detection admin notice and best-effort purge on key save.<\/li>\n<li>Google Consent Mode signal support.<\/li>\n<li>Robust widget-key validation and verify-config pull.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Banner injection toggle; loud guardrails for empty-key \/ misconfiguration.<\/li>\n<li>Dead-URL default fixes.<\/li>\n<\/ul>","raw_excerpt":"Consent banner and server-side tracker blocking, connected to your AI Privacy Center account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347300"}],"author":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/puregraceai"}],"wp:attachment":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347300"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347300"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347300"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347300"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347300"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}