Visitors outside EEA/UK/CH (e.g. Americas) have no __tcfapi injected by
Google Funding Choices, causing the TCF bridge poll to time out and leaving
them permanently at the default denied state. After the 10s timeout, grant
full consent — GDPR opt-in doesn't apply to these visitors and CCPA is
an opt-out model, so granted is the correct default.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Denied consent was being stored with the full 365-day expiry, preventing
the banner from re-appearing for users who initially declined. Now when
analytics is denied the cookie expires in 3 days so those users are
re-prompted automatically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
FC accepts the IAB __tcfapi('displayConsentUi', 2, …) command without
throwing but silently no-ops, which caused the previous order (IAB first,
FC-specific fallback second) to swallow the click. Reorder so that
googlefc.showRevocationMessage() is tried first whenever window.googlefc
is present, with the IAB call kept as the fallback for non-FC CMPs
(Sourcepoint, Didomi, etc).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New cmp_mode setting toggles between the built-in banner (default,
unchanged) and a bridge mode that defers banner UX to an external
IAB TCF v2.2 certified CMP — e.g. Google's free Privacy & messaging
(Funding Choices) or Tarteaucitron.js — and listens to __tcfapi to
keep custom-script gating, attribution preservation, the att_cc_consent
cookie cache and the WP Consent API bridge in sync. Lets sites that
need a Google-certified CMP for EEA/UK AdSense/AdMob serving keep
using this plugin for everything except the consent UI itself.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add linker domains setting to Advanced tab for cross-domain measurement.
Outputs gtag('set','linker') before config call so GA4 appends the _gl
parameter to links pointing at configured domains.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Address findings from security audit: wrap inline JSON.parse in
try/catch to prevent consent flow failure on corrupted cookies,
allowlist admin tab parameter, clamp consent_expiry server-side,
escape all server values in admin JS table builder, fix focus trap
listener cleanup, add aria-labelledby and banner focus for screen
readers, skip frontend loading during AJAX.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Google Consent Mode v2 cookie consent plugin with session attribution
preservation, custom script management, and gtag.js/GTM support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>