Changelog — Consenta WordPress Plugin Version History

Consenta Changelog

All plugin versions and changes at a glance — new features, bugfixes and improvements.

v1.15.23
12.05.2026

License email strict validation + activation UI fixed

Feature Fix Security
  • License activation: email must now match customer email. Previously the email field was optional during activation and never server-checked — anyone with the license key could enter any email and activate. Now with three-layer validation: (1) Pro requires the email, (2) sends it with the activate call to the license server, (3) the server strictly matches it against the customer profile email. Mismatch → clear error "License email does not match the one stored at Consenta". Backward-compatible: old plugin versions that don't send email keep working (server only enforces if email is provided).
  • Bugfix: the email validation added in 1.15.21 didn't work — License::api_call() extracted only key and site_url from params and silently dropped email. Server never received it → no strict check. Now properly forwarded.
  • UI: license activation errors appeared twice. A failed activation rendered both a toast and an inline notice — confusing because the same text appeared twice in different styles. Now only the inline notice directly below the form field (persistent, closer to input context). Successful activation still shows the toast (brief, ephemeral).
  • License tab: email hint directly below the email field ("Must exactly match the email you used to purchase the license from Consenta.") + red required-star on both license key and email. Both fields with HTML5 required attribute.
v1.15.4–1.15.20
08.05.2026 – 11.05.2026

Maintenance releases: various bug fixes and detail improvements

Fix Improve
  • Various minor improvements, translation updates and bug fixes — see the plugin updater in wp-admin for the per-version detail list.
v1.14.3
07.05.2026

Multilingual fixes: placeholder fallback, cookie native dict expanded, button CSS classes, import bug

Fix Feature Improve
  • YouTube/Vimeo/Maps placeholder stayed German on NL/EN/FR sites: Bug report Thomas / bachfestivaldordrecht.nl 2026-04-29 — the JS i18n lookup for blocker placeholders fell straight from visitor-lang to the German source string when the visitor language wasn't found in the i18n bucket due to an edge case. Now with cascade fallback visitor-lang → server-fallback-lang → EN → DE → source — English kicks in before German becomes the fallback (better lingua franca for non-DE visitors). On NL sites, the placeholder box now reliably appears in Dutch ("Deze inhoud wordt geleverd door YouTube. Om te laden is uw toestemming vereist.").
  • Cookie native dict extended with 5 common WordPress plugin cookies (GDPR Cookie Consent + Wordfence): cookielawinfo-*, viewed_cookie_policy, wf_loginalerted_*, wfvt_*, wfwaf-authcookie-*. Now with hand-curated translations in all 7 native languages (EN, FR, ES, IT, NL, DA, SV) — previously they fell through to raw German. A Dutch visitor now sees "Slaat de cookie-toestemming op voor elke cookie-categorie." instead of the original German description. 35 new native-dict entries.
  • Custom CSS classes per banner button for individual styling. Banner buttons now carry consenta-btn-accept, consenta-btn-reject and consenta-btn-details alongside consenta-btn-primary/-secondary — site owners can style each button separately via CSS (e.g. green accept, red reject). The dialog already had these classes; the banner was missing them. Backward-compatible: existing -primary/-secondary selectors keep working.
  • Settings JSON import: localized-texts were lost. The import path used array_map('sanitize_text_field', $value), which only fits flat arrays. localized-texts is 2-level nested ([lang => [key => html]]) — the sub-arrays were passed to sanitize_text_field as non-string values → PHP warning + all translations became empty strings. Now with detection logic: nested structures are sanitized via array_walk_recursive, flat ones via array_map. Custom texts survive the JSON round-trip cleanly. Bug report bachfestivaldordrecht.nl 2026-04-29.
v1.14.2
07.05.2026

Server errors in 34 languages — plugin mapping instead of raw server strings

Fix Improve
  • Server error messages from the license server now appear in all 34 plugin languages. Previously: when the license server sent an error response (e.g. "Authentication required (signed cookie or registered site_url)"), the plugin displayed the raw English server text — the server doesn't know the plugin admin's language. Now: the server delivers structured codes (auth_required, site_not_registered, license_inactive, rate_limit etc.), the plugin maps them via __() to local strings — automatic language selection based on admin locale. 26 new strings × 33 languages = 858 new entries in the translation database.
  • Plugin-side: all hardcoded strings added in recent iterations (in License.php, Plugin.php, Frontend/Consent.php, WhiteLabel.php) now route through __() — so the existing 34-language system covers the newer code paths too. Plugin admin in Polish sees Polish errors, in Japanese Japanese, etc.
v1.14.1
07.05.2026

Multi-Site sync: browser user agent for IONOS blocks + lenient WL-Sync URL matching

Fix
  • Multi-Site stats sync now works reliably on IONOS hosting (and similarly strict WAFs / security plugins). WordPress' default outbound request sends user agent WordPress/X.X; https://... — IONOS and some WAF providers classify this as a "bot" and respond with 401 Unauthorized, even when the Bearer token is correct. The Multi-Site Dashboard therefore showed "Invalid token" despite token regeneration. Fix: fetch_site_stats now sends Mozilla/5.0 (compatible; Consenta-MultiSite/<ver>; +https://consenta.io) — passes typical UA filters and still honestly identifies us in site owners' logs. Tokens do not need to be regenerated, just update the plugin and re-run the sync.
  • The header tweak covers both phases of the token-leak hardening flow: both the phase-1 redirect probe (without Authorization header) and the final authenticated request now send the browser user agent. SSRF protection, domain-anchor check and Bearer-token-leak prevention remain unchanged.
  • White-Label "Central Sync": more lenient URL matching (server-side hotfix, no plugin update needed). The site-activation binding introduced in 1.14.0 for wl_config_save / wl_config_get was comparing site URLs too strictly — if the site was originally activated as https://example.com but home_url() now returns https://www.example.com (or vice versa after a www / SSL migration), the auth check failed with "Authentication required (signed cookie or registered site_url)". The comparison now ignores scheme (http/https), www prefix, trailing slash, default ports and case — foreign domains are still rejected, but the same site under notation drift is recognized. Just retry the Sync button on affected sites.
v1.14.0
07.05.2026

Security hardening, tier gating with grandfathering & Pro sites 3→10

Security Feature Improve Fix
  • Webhook verification hardened (Stripe, Paddle, PayPal). Webhook endpoints now strictly require a configured signing secret — previously webhook calls on fresh installations or with an accidentally cleared secret were accepted unverified. Stripe/Paddle reject requests without a secret or with an invalid signature. PayPal webhook is temporarily disabled until full RSA cert verification is implemented; customer payments via PayPal continue through the auth-cookie-backed capture endpoint.
  • Customer account cookie HMAC-signed. The consenta_customer session cookie on consenta.io now carries an HMAC-SHA256 signature via wp_salt('auth') + per-install pepper. Previously it was base64-encoded JSON without integrity protection — a known customer email could have allowed session spoofing. 30-day migration window: existing sessions remain valid, new ones are signed immediately.
  • Site activation binding for sensitive license endpoints. The plugin decryption key endpoint (/dkey) and the White-Label config sync (wl_config_save/wl_config_get) now additionally verify that the requesting site_url is in the license activation list, on top of license-key authentication. Plus per-license rate limiting (5–60 requests/hour depending on endpoint). Mitigates the risk of license keys leaking via support emails, screenshots or backups.
  • Tier upgrade endpoint now requires a paid order with matching email and tier, plus idempotency protection against replay. Previously: a valid nonce + known license key + known email were enough to "upgrade" a Starter/Pro license to Agency with amount=0.00. Also closed: the public ?action=addon_activate URL handler (free White-Label addon activation given any active license key); addon activation now happens exclusively from signature-verified webhook events.
  • Order polling endpoint no longer returns the license key publicly. consenta_check_order now responds only with status + associated email address. License keys are delivered exclusively in the confirmation email to the order address. Closes a data exposure path that would have surfaced the license key given a known order_ref.
  • Support system inbound email endpoint: hard-fail when no API key is configured (previously: empty key = public endpoint, ticket forgery possible). API key comparison now uses hash_equals() against timing-oracle attacks. $wpdb->esc_like() on user searches closes LIKE-wildcard tricks.
  • Webhook audit logging: every write to the central White-Label config is logged with auth path, IP, user agent and timestamp (max 50 entries per license, FIFO). In a security incident, this allows attack-vector reconstruction.
  • License tier gating with grandfathering. Previously every active license unlocked all features — although the pricing table advertised REST API, Multi-Site Dashboard and Branded Reports as Agency-only. From 1.14.0, those three features are actually tied to the Agency tier. Important for existing customers: all licenses activated before 2026-05-07 keep all features permanently (grandfathering), regardless of tier. So no functionality loss for current Pro or Starter license holders. The cutoff date is never rolled forward.
  • Pro tier: 10 sites instead of 3. The pricing table promised 10 activations for the Pro plan, but the license server only handed out 3. Synced: Pro licenses now actually allow 10 sites, Trial Pro 5 (trial stays time-limited), Agency 99 (= unlimited), Starter 1 — as advertised on the pricing page. Existing Pro licenses benefit automatically on the next plugin heartbeat refresh.
  • Multi-Site Dashboard stats cache: the /stats aggregate queries (total consents, accept rate, daily/geo charts) are now cached for 5 minutes. Dashboards with 10+ connected remote sites load noticeably faster, and the license server is hit less often.
  • Code cleanup: 4 unused forwarder controller classes and 6 AJAX handlers that nothing called were removed — attack surface reduced without functional loss. The uninstall hook now also removes warmup queue options and clears the license validate cron.
  • "Display language" setting in the Languages tab now persists. The switch between site language and browser language (introduced in 1.13.14) wrote to the wrong option key due to a typo — the setting silently had no effect and stayed on its default. Corrected to the right consenta_options key via Settings::set/save, in-memory cache is updated alongside.
  • Order idempotency: consenta_save_paddle_txn only sets a transaction_id when the field is still empty (no override of an already-set value). Prevents audit trail corruption and silent order laundering in the edge case where multiple calls come in for the same order.
v1.13.0
04.05.2026

Per-service consent UI, custom Google Fonts & slimmer ZIP

Feature Improve Fix
  • Custom-slug mode for all 1500+ Google Fonts: if the top-150 selection isn't enough, drop any slug into the picker's "Use other Google font" panel (crete-round, roboto-flex, playfair-display-sc …). Consenta derives the family name from the slug and downloads it on next save. Non-existent fonts produce a concrete error message.
  • The Cookie Settings dialog now shows a compact row "Per-service consents granted: Google Maps" with a [Reset] button as soon as the visitor has clicked a "Load Google Maps" / "Load YouTube" / "Load Vimeo" placeholder. Previously this per-service consent (in localStorage.consenta_services) was stored granularly — but invisible to users and only revocable by deleting cookies. Now clearly surfaced and revocable in one click (iframes get re-replaced with the placeholder).
  • Plugin ZIP shrunk from 3.9 MB to 2.2 MB (−45 %) and the on-disk languages/ folder from 10 MB to 4.4 MB. We now only ship compiled .mo files (what WordPress reads at runtime) plus the .pot template. The .po source files (~6 MB, editor format for translators) are no longer in the distribution ZIP — functionality is 100 % preserved. Noticeably faster updates and smaller hosting footprint.
  • Robust font install: on cURL error 60: SSL certificate problem (typical on MAMP/XAMPP/Local-by-Flywheel or behind corporate proxies with broken CA bundles) the download is retried once with sslverify=false. Risk is bounded: only static CSS and woff2 files, woff2 URLs are whitelist-checked against fonts.gstatic.com, no credentials in flight.
  • Auto-verify on every Consenta admin page: if the local CSS of a selected font is missing (e.g. the initial save download hit a PHP timeout), a silent re-install kicks off. If that also fails, a red admin notice surfaces with the concrete error (HTTP code, missing write permission etc.) instead of silently falling back to system-ui.
  • PHP notice Function is_feed was called incorrectly. Conditional query tags do not work before the query is run. fixed: is_feed() calls in Blocker and TagManager are now gated with did_action('parse_query'). Resolves conflicts with IDE plugins like WPCodeBox that hook into the same actions and surface those warnings.
  • Font picker layout: item rows now render correctly as a vertical list with separators instead of running inline. Root cause was a WP admin CSS clash: label{display:inline} from forms.css beat our inline style="display:flex"; now hardened with dedicated CSS classes plus !important. At the same time the filter (search + category) is functional again — the !important hardening had nullified the previous style.display='none' hiding, a new .is-hidden class fixes that cleanly.
  • Multi-word fonts (Open Sans, Playfair Display, Indie Flower, Shadows Into Light, Permanent Marker, Roboto Mono …) now render in the admin preview with their real glyphs instead of system-ui fallback everywhere. Root cause was double URL encoding: str_replace " "→"+" followed by rawurlencode() turned + into %2B — Google interpreted family names literally and returned HTTP 400 → no @font-face definitions → everything fell back to system-ui.
v1.12.0
03.05.2026

Google Fonts (GDPR-compliant self-hosted) & 34-language admin

Feature Improve Fix
  • Google Fonts integrated — fully GDPR-compliant self-hosted. The Dialog and Banner editors now offer a dedicated font picker with the 160 most popular Google fonts (Inter, Roboto, Open Sans, Montserrat, Playfair Display, Lora, Noto Sans JP/KR/SC, Cairo, Vazirmatn …). Search field + category filter (sans-serif / serif / display / handwriting / monospace), live preview rendered with the actual font.
  • Auto-download on save: pick a Google font and Consenta fetches the woff2 files (latin + latin-ext subsets) and the CSS locally to wp-content/uploads/consenta-fonts/{slug}/. The frontend then serves the font exclusively from your own domain — zero requests to fonts.googleapis.com / fonts.gstatic.com. This automatically satisfies the LG München 2022 ruling on Google Fonts (3 EO 1361/21): no IP-address transfer to Google, no consent requirement, no liability trap. License file (OFL/Apache-2.0/Ubuntu) is stored alongside the font.
  • Admin UI now fully translated into all 34 languages (frontend dialog was already covered) — previous coverage was only 7 (de, en, uk, sv, fr, es, it, nl). Newly complete: pl, pt, cs, da, fi, hu, ro, bg, el, hr, sk, sl, et, lt, lv, mt, ga, ru, tr, ja, ko, zh, ar, he, fa, ur. Roughly 5,970 hand-curated translations across ~181 admin strings (tab labels, buttons, status text, help pages, error messages). Resolution runs through a central admin-texts.json overriding the shipped po/mo via gettext filter — previously many po/mo strings were Google-Translate output with grossly wrong terms (e.g. "Toggle anzeigen" instead of "Impressum anzeigen" in Ukrainian).
  • Picker preview in the admin area (only there) loads all 160 fonts via the Google Fonts CDN so you see each family rendered in the editor — chunked across 4 requests of 40 families to stay below reverse-proxy URL limits. The frontend stays 100 % self-hosted, no leak.
  • Fatal TypeError fixed: Helper::localize_lifespan() now also accepts multi-language lifespan arrays ({de: "6 Monate", en: "6 months", …}). Previously the dialog crashed on sites with cookie database entries whose lifespan field was stored as an array instead of a string — the whole frontend rendering blocked with a white screen.
v1.11.0
20.04.2026

Scan UX, editor save feedback & theme compatibility

Feature Improve Fix
  • Scan result overlay with spinner during the scan and a detailed list afterwards: every newly added cookie, domain and resource is shown individually with purpose and provider. The overlay no longer closes automatically — admins can review the results at their own pace.
  • New filter consenta_force_frontend_output as an escape hatch for edge cases: forces frontend assets to load even when the automatic maintenance/staging detection would normally block them. Useful in exotic deployment setups.
  • Completely reworked save feedback in the Dialog/Banner/Widget editor: animated spinner on the button while saving, green "✓ Saved" state on success, visible toast top-right with 2-second countdown. No more full page reload — the preview is refreshed in-place.
  • The "Scan now" button in the admin notice after plugin updates now actually works: click opens the correct page and triggers the scan automatically. Previously the page just loaded and nothing happened.
  • Compatibility with the Password Protected plugin (Ben Huson): Consenta was being suppressed too aggressively, even on pages not actually protected by the plugin. The check now evaluates the real protection status instead of just the plugin presence — Consenta loads reliably on public pages again.
  • Themes that skip wp_footer() on some templates (Elementor Canvas, FSE Blank Templates, some landing page builders): additional fallback hooks on wp_body_open and shutdown guarantee reliable consent dialog delivery — double injection is prevented via static flags.
v1.10.0
20.04.2026

Imprint auto-setup, footer links & functional merge

Feature Improve
  • Imprint page auto-setup: on the first admin visit after activation, Consenta creates a placeholder page referencing § 5 DDG (German Digital Services Act) if none exists — analogous to the Cookie Declaration page. Existing pages with common slugs (impressum, imprint, legal-notice) are automatically adopted.
  • Consent dialog footer now shows links to Cookie Declaration and Imprint — fully translated across all 34 bundled languages. Previously the labels were missing entirely for all non-German visitors.
  • New option "Merge Functional into Essential" in the Dialog tab: visually merges the Functional category with Essential — cookies appear under "Essential" and are always active. Simplifies the UI for end users without weakening the legal separation: backend, logs and IAB TCF 2.2 mapping remain granular per purpose.
  • Legal pages grouped in admin: Privacy Policy page, Imprint page and Cookie Declaration page now sit directly next to each other in the Dialog tab instead of being separated by unrelated toggles like Logo URL or Font choice.
  • Inline edits to cookie descriptions now write into the language slot matching your WordPress admin locale (English admin → EN slot, German admin → DE slot, etc.). Previously every edit landed in the DE slot, so English admins inadvertently overwrote the German version.
  • Description fallback language: when no translation exists for the current visitor language, Consenta now falls back to English rather than German. Greek, French, Spanish visitors no longer see unintended German — English is the better lingua franca.
  • Dialog footer links are only rendered when the target page is actually published. Deleted, trashed or draft pages no longer produce dead 404 links in the consent dialog.
v1.9.0
19.04.2026

Gutenberg block suite — conditional content, transform & category

Feature
  • Conditional Content block redesigned: tab navigation in the editor with two slots — Conditional (shown after consent) and Fallback (shown before consent). Both zones now accept any Gutenberg block via drag & drop — images, groups, columns, custom embeds. Previously the fallback was a plain text field only.
  • Block transform API: select any existing block (e.g. YouTube embed, map) and choose Transform to → Conditional Content from the block menu — the block moves automatically into the Conditional slot, the Fallback stays empty for you to fill. Analogous to the core Group block.
  • Dedicated block category "Consenta" in the Gutenberg inserter. All three blocks (Cookie Declaration, Consent Status, Conditional Content) now live under their own section instead of being scattered among core blocks in "Widgets".
  • All Gutenberg blocks upgraded to block API v3 — compatible with WordPress 6.9, no more deprecation warnings in the editor.
v1.8.3
19.04.2026

White-Label addon gating, /en/ subpage fix & remote sync improvements

Security Fix Improve
  • White-Label addon gating: WhiteLabel::is_licensed() now explicitly requires the white_label addon in license state — Agency tier alone no longer unlocks the branding override. Closes a bypass where Agency licenses could use the addon without purchase.
  • Frontend widget disappeared on /en/ subpages (where the theme short-circuits template_redirect with exit to map URL slugs). Output hooks (wp_head, wp_footer, wp_body_open, shutdown) are now attached at plugin init instead of inside template_redirect — survives aggressive theme routes. Gate checks (preview mode, URL exclusions) unified into a central is_suppressed() method.
  • License recheck: wp_remote_post now also sends the key as a query parameter — defensive against 301/302 redirects that turn POST into GET and drop the body (previously resulted in "license not found").
  • Remote sites sync: bumped redirection => 0 to redirection => 3 so canonical WordPress redirects (trailing slash, http→https, WAF rewrites) stop silently killing stats fetches. HTTP error codes now map to actionable German messages (401/403/404/429/5xx).
  • Sync button in Sites tab: refresh icon now spins during the AJAX request and a toast confirmation ("Updated") appears on completion — previously there was no visible feedback when the numbers didn't change.
  • License tab: White-Label addon card is always shown when a license is active (not only when the addon is unlocked). Three clear status variants: "Active" (green), "Unlocked" (grey), "Not unlocked" (yellow) — the last with "Buy" and "Recheck license" buttons.
  • Verbose recheck: after clicking "Recheck license" a coloured admin notice shows the exact server result — green "Addon detected", neutral "License status updated", red on network/HTTP errors. No more technical noise.
v1.8.2
19.04.2026

Config hash, inline edit & consent text defaults

Improve
  • Config hash no longer includes localized texts — cosmetic wording changes no longer force every visitor to re-consent (widget stays visible during admin testing). Audit trail still captured via separate consent_text_hash per log entry
  • Admin inline edit: Enter key now commits (previously didn't), span text updates immediately after AJAX save without reload
  • Multilingual description fields survive inline edit — update writes only to the DE slot, does not overwrite the entire {lang: …} object
  • Consent text defaults completely renewed for all 34 languages: 5 legally structured paragraphs (technology overview, third-country transfer Art. 49 GDPR, legitimate interest Art. 6, privacy policy/minimum age, right to refuse Art. 7(4)) — native translations, not machine translated
v1.8.1
18.04.2026

Defensive DB migration, MyMemory cache & legal templates

Improve
  • Consent log schema: defensive column migration of consent_type — now runs independently of DB_VERSION gate, prevents silent INSERT failures when version tracking drifts
  • MyMemory translation results cached 7 days (UI texts) / 30 days (entity descriptions) in WP transients — re-runs cost nothing
  • Legal page templates (impressum/datenschutz/agb/widerrufsbelehrung): duplicate-style-attribute bug fixed, EN content brought to DE parity (Liability for Links, EU ODR paragraph, § 11 Data Protection, § 14 Severability, § 15 Amendments, Subscription Cancellation)
v1.8.0
18.04.2026

Multilingual Cookie Consent: Runtime i18n, Bulk Translation & TinyMCE Editor

Feature
  • Cookie declaration shortcode is now language-aware: lifespans auto-translate across 9 languages (regex vocabulary — "2 Jahre" → "2 years" / "2 ans" / "2 años" …), descriptions via built-in dictionary for top entries (Google Analytics/Ads, Meta, YouTube, Stripe, Cloudflare, WordPress core, WooCommerce, Paddle)
  • New Languages tab: manage 34 languages centrally with source dropdown, live source-text preview per field, one-click translation via MyMemory (free, no API key), bulk button "Translate all from source" with progress tracking
  • TinyMCE rich text editor for long texts (banner-text, consent-text, blocked-content-desc): toolbar for bold/italic/underline/lists/links, text tab with Quicktags, lazy-init per language (102 editor instances not booted at once)
  • Bulk translation of entity descriptions (cookies/domains/resources): source→target dropdown + translate button in each entity tab, multilingual storage as {de, en, fr, …} object with per-row badge display, idempotent (already-translated fields are skipped)
  • Frontend defense-in-depth: CSS fallback via html[lang] selector hides wrong-language blocks even if server-side stripping fails
v1.7.0
17.04.2026

Security Release: HMAC Cookies, SSRF Protection, Token Hashing & XSS Hardening

Security Improve
  • HMAC-SHA256 cookie signature (consenta_auth) for server-authenticated consent verification — replaces weak djb2 hash
  • SSRF protection on all outbound HTTP calls (webhook, scanner, geolocation): blocks private IP ranges (RFC1918, loopback) and cloud metadata endpoints (169.254.169.254)
  • API tokens are now stored as SHA-256 hashes at rest (plaintext shown only once on generation)
  • Multisite token display masked — token no longer exposed in title attribute tooltips
  • XSS hardening: style attribute removed from consent text sanitization allowlist
  • Open redirect fix: wp_safe_redirect() used instead of wp_redirect() for dismiss-rescan flow
  • CSS injection fix: white-label logo URL properly quoted in CSS url()
  • DoS protection: CMP import limited to 1 MB and 5,000 entities max
  • Cookie table: New column order — Name → Description → Category → Duration → Actions
v1.6.0
17.04.2026

Webhooks, Browser API Blocking, CMP Import & CCPA Confirmation

Feature Improve
  • Webhook system: Real-time HTTP POST notifications for consent events (consent.new, consent.update, consent.revoke, consent.optout) with HMAC-SHA256 signature
  • Browser API blocking: Push/Notification, Background Sync and Cache API are blocked until consent is given
  • CMP import extended: Borlabs Cookie, Complianz and GDPR Cookie Compliance as new import sources (now 6 CMPs)
  • CCPA/CPRA annual confirmation: Automatic re-consent prompt after 365 days
  • HMAC cookie signing: djb2-hash-based consent cookie verification (PHP + JS synchronized)
  • Consent PDF proof: Print-optimised A4 HTML with GDPR legal text and QR verification
  • Scan history: All scan results logged with timestamp in DB table
  • Plugin update detection: Admin notice with rescan recommendation after plugin updates
  • WP Privacy Tools: Integration with WordPress privacy export and erasure tools
  • A/B testing: Wilson score confidence intervals (95%) and chi-square significance test
  • WCAG 2.1 AA: Skip link with focus-visible pattern, improved focus management
  • RTL: unicode-bidi CSS rules and Nastaliq font for Urdu
  • Geolocation: HTTPS-only geo-lookup with intelligent caching
  • Consent type tracking: Distinction between new/updated/revoked in logs
  • IAB TCF 2.2: Upgraded from TCF 2.0 to TCF 2.2 — tcfPolicyVersion 4, GVL v3, purposes 3–6 excluded from legitimate interest
v1.5.2
17.04.2026

QR Verification, Batch Export & Privacy Policy

Feature Improve Fix
  • QR code verification: Consent proofs now include a scannable QR code for authenticity verification
  • Digital signature: HMAC-SHA256 signature and document ID in every consent proof
  • Batch export: Export all consent proofs by month as ZIP archive — now including QR code
  • Cookie declaration in WordPress privacy policy: Automatic table of all configured cookies, domains and resources
  • White-Label addon price is now loaded dynamically from the admin dashboard
  • System buttons (import, export, batch) right-aligned for consistent UI
  • QR code URL encoding: Replaced esc_js() with wp_json_encode() — verification URL now works correctly
  • Batch export button: window.open instead of window.location.href for correct download
  • Statistics dashboard: Time trends with 7d/30d/90d/12M toggle — daily, weekly and monthly grouping
  • Statistics dashboard: Rejection rate as separate metric with progress bar
  • Statistics dashboard: Opt-out/revocation tracking as dedicated card (total, rate, today)
v1.5.1
17.04.2026

License & Blocker Fixes

Fix
  • Blocker: Per-service consents are correctly reset on rejection
  • Blocker: "Accept all" correctly unblocks unknown domains
  • Statistics: Acceptance rate and unique devices are correctly calculated
  • License: Tier detection from key prefix (AGY/STA) fixed
  • License: API communication fixed (GET/POST parameters)
  • License: LIFETIME display for lifetime licenses fixed
v1.5.0
17.04.2026

License System, Translations & UI Improvements

Improve
  • Multilingual consent texts: "Last consent" is now displayed client-side in the visitor's language (31 languages)
  • License validation: Periodic API revalidation when visiting the license tab — tier and expiry are automatically synced
  • Widget preview: Correct positioning (bottom left/right) in admin preview
  • Custom CSS: Now also available in the widget tab
  • Admin preview: Unified checkerboard pattern for dialog and widget preview
v1.4.0
16.04.2026

Service Worker, WooCommerce, Gutenberg & Compliance

Feature Improve Security
  • Service Worker blocking: Intercepts fetch(), XHR, dynamic imports and beacon requests at network level — HTTP 451 for blocked domains
  • WooCommerce integration: Automatic blocking of WC tracking scripts and automatic cookie declaration (cart hash, session, analytics)
  • Gutenberg block: Native WordPress block for the cookie declaration table — no shortcode needed
  • CMP import: Migration from CookieBot, OneTrust and Usercentrics via JSON import with automatic category mapping
  • Consent statistics dashboard: Daily chart, acceptance rate, group and geo distribution in admin
  • Consent proof PDF export: Printable GDPR proof per Art. 7(1) with date range filter
  • Consent history: Visitors can view their last 10 consents in the dialog
  • Auto-scan scheduler: Automatic cookie scan daily/weekly via WP cron with email notification
  • REST API consent revocation: POST /consenta/v1/revoke for programmatic consent revocation
  • REST API remote management: GET/PUT /consenta/v1/remote/settings and /remote/entities with bearer token auth
  • WordPress Multisite: Network admin page with site overview, settings propagation and auto-defaults for new sites
  • HMAC-signed consent cookie: SHA256 signature prevents cookie manipulation, backwards compatible
  • Consent proof hash: SHA-256 of dialog texts stored in every log entry (Art. 7(1) GDPR)
  • ARIA/Accessibility: role, aria-label, aria-describedby, aria-checked, keyboard navigation, aria-live announcements (WCAG 2.1 AA)
  • RTL CSS: Full right-to-left support for dialog, banner and widget
  • Consent modes documentation: New guide section explains all three blocking levels in admin
  • IAB CMP-ID: Now configurable in settings instead of hardcoded
  • Log retention: Retention period for consent logs now configurable in admin (default: 365 days)
  • Database v1.2: New column consent_text_hash in log table
  • Rate limiting on log endpoint: Max 10 requests/minute/IP + honeypot field against bots
v1.3.0
15.04.2026

CCPA, GPC, Content Blockers & Compliance

Feature Improve Security
  • GPC signal (Global Privacy Control): Automatic detection and honoring of navigator.globalPrivacyControl — legally mandated under CCPA/CPRA
  • CCPA / CPRA mode: Opt-out instead of opt-in for US visitors, automatic geo-detection via timezone and server IP
  • Content blocker placeholders: Smart placeholders for YouTube, Vimeo, Google Maps, Facebook, Instagram, TikTok, X/Twitter, LinkedIn, Spotify and SoundCloud with service icon, description and "Load" button
  • Focus trap (WCAG 2.1 AA): Tab focus stays trapped in consent dialog, focus restoration on close
  • Re-consent on policy change: Config hash detects changes to cookies, texts or mode and automatically forces re-consent
  • Consent versioning: Config hash and GPC status are stored in consent log — complete audit trail
  • Auto cache purge: Automatic cache clearing after settings changes for WP Rocket, W3 Total Cache, WP Super Cache, LiteSpeed, Autoptimize, WP Fastest Cache, Hummingbird, SG Optimizer and Cache Enabler
  • Database v1.1: New columns config_hash and gpc in log table for extended compliance evidence
  • CSV export extended: Config hash and GPC status are now exported
  • Feature comparison tables on sales pages unified and aligned with current plugin features
v1.2.0
15.04.2026

Multi-Language, Powered-by & GDPR Text

Feature Improve
  • Powered by Consenta: Optional branding link in dialog and banner, toggle on/off
  • GDPR text extended: Art. 7(4) (no disadvantage for refusal) and reference to cookie details in categories
  • Consent texts in 34 languages updated and GDPR-compliant extended
  • Dialog box wider: max-width increased from 580px to 720px for better readability
  • Consent text more compact: Font size and line height optimized
v1.1.1
11.04.2026

License Activation & Auto-Deactivation

Improve Fix
  • Auto-Deactivation: Plugin notifies the license server when deactivated or deleted
  • License Activation: Offline fallback when license server is unreachable
  • Toggle save: Fixed race condition with editor toggles
v1.1.0
08.04.2026

Log Filters, WCAG & Dark Mode

Feature Improve
  • Log filters: Search by device ID, IP, date and column sorting
  • WCAG Compliance: Buttons automatically use the highest contrast text color
  • Dark Mode: Improved text readability with adjustable brightness
  • Accent color: Color picker in settings for buttons and links
v1.0.3
07.04.2026

IPv6 & CSV Export Fix

Fix
  • IPv6 CIDR Blocking: IPv4-mapped IPv6 addresses are correctly normalized
  • CSV Export: PHP 8.4+ compatibility
v1.0.2
04.04.2026

Multi-Site Dashboard & Table Sorting

Feature Improve
  • Multi-Site Dashboard: Manage all WordPress sites centrally with drag-to-reorder
  • Tables: Interactive column sorting in cookie, domain and resource tables
  • Feature toggles: New features start disabled by default
v1.0.1
01.04.2026

Geolocation & Banner Position

Feature Fix
  • Geolocation: Show consent dialog only for EU visitors (timezone + language detection)
  • Banner position: Top or bottom selectable in settings
  • Service Worker: Correct deregistration on mode switch
  • Widget icon: Correct positioning on mobile
v1.0.0
21.02.2026

Initial Release

New
  • Cookie Blocking: document.cookie override, MutationObserver for scripts/iframes, HTTP header interception
  • Consent Dialog: Fullscreen or embedded, with categories, logo and privacy link
  • Cookie Banner: Responsive banner with accept/reject/details buttons
  • Google Consent Mode v2: Automatic consent signals to GTM & GA4
  • IAB TCF 2.0: Full __tcfapi() implementation with vendor management
  • Consent Logging: Structured SQL logs with device ID, IP, geo and timestamp
  • Auto Scanner: Automatic detection of cookies, domains and scripts
  • 34 languages: Pre-installed consent texts in DE, EN, FR, ES, IT, NL, PL, PT and more
  • Live Editor: Edit colors, texts and logo directly in admin with real-time preview
  • Service Worker Blocking: Complete blocking of all third-party requests in full consent mode