Alle Plugin-Versionen und Änderungen im Überblick — neue Features, Bugfixes und Verbesserungen.
License::api_call() extrahierte aus den Params nur key und site_url und verwarf die email stillschweigend. Server bekam sie nie → kein Strict-Check. Jetzt korrekt durchgeschleift. required-Attribut. Visitor-Lang → Server-Fallback-Lang → EN → DE → Source — Englisch greift bevor Deutsch fallback wird (bessere Lingua franca für non-DE-Visitors). Auf NL-Sites erscheint die Placeholder-Box jetzt zuverlässig auf Niederländisch („Deze inhoud wordt geleverd door YouTube. Om te laden is uw toestemming vereist."). cookielawinfo-*, viewed_cookie_policy, wf_loginalerted_*, wfvt_*, wfwaf-authcookie-*. Jetzt mit hand-kuratierten Übersetzungen in allen 7 Native-Sprachen (EN, FR, ES, IT, NL, DA, SV) — vorher fielen sie auf raw-DE durch. NL-Visitor sieht z.B. jetzt „Slaat de cookie-toestemming op voor elke cookie-categorie." statt der deutschen Original-Beschreibung. 35 neue Native-Dict-Einträge. consenta-btn-primary/-secondary auch consenta-btn-accept, consenta-btn-reject und consenta-btn-details — Site-Owner können damit jeden Button per CSS einzeln gestalten (z.B. grüner Akzeptieren-Button, roter Ablehnen-Button). Im Dialog waren diese Klassen schon da, im Banner haben sie bisher gefehlt. Backward-Compat: alte -primary/-secondary-Selektoren bleiben funktional. localized-texts gingen verloren. Der Import-Pfad nutzte array_map('sanitize_text_field', $value), was nur für flache Arrays passt. localized-texts ist aber 2-stufig verschachtelt ([lang => [key => html]]) — die Sub-Arrays bekamen sanitize_text_field auf nicht-String-Werte übergeben → PHP-Warning + alle Übersetzungen wurden zu leeren Strings. Jetzt mit Detection-Logik: nested-Strukturen werden via array_walk_recursive sanitized, flache via array_map. Custom-Texts überleben den JSON-Roundtrip jetzt sauber. Bug-Report bachfestivaldordrecht.nl 2026-04-29. auth_required, site_not_registered, license_inactive, rate_limit etc.), das Plugin mapped sie über __() auf lokale Strings — automatische Sprachauswahl je nach Admin-Locale. 26 neue Strings × 33 Sprachen = 858 neue Einträge in der Übersetzungs-Datenbank. License.php, Plugin.php, Frontend/Consent.php, WhiteLabel.php) sind jetzt durch __() geleitet — damit greift das bestehende 34-Sprachen-System auch für die neueren Code-Pfade. Plugin-Admin in Polnisch sieht polnische Fehler, in Japanisch japanische, etc. WordPress/X.X; https://... — IONOS und einige WAF-Provider klassifizieren das als „Bot" und antworten mit 401 Unauthorized, selbst wenn der Bearer-Token korrekt ist. Das Multi-Site-Dashboard zeigte deshalb „Ungültiger Token" trotz Token-Neugenerierung. Fix: fetch_site_stats sendet jetzt Mozilla/5.0 (compatible; Consenta-MultiSite/<ver>; +https://consenta.io) — kommt durch typische UA-Filter und identifiziert uns weiterhin ehrlich für Site-Owner die ihre Logs durchsehen. Tokens müssen nicht neu generiert werden, nur das Plugin updaten und Sync neu starten. wl_config_save / wl_config_get verglich Site-URLs zu strikt — wenn die Site bei der ersten Lizenz-Aktivierung unter https://example.com registriert wurde, home_url() aber mittlerweile https://www.example.com zurückgibt (oder umgekehrt nach www-/SSL-Migration), schlug der Auth-Check mit „Authentication required (signed cookie or registered site_url)" fehl. Der Vergleich ignoriert jetzt Scheme (http/https), www-Präfix, Trailing-Slash, Default-Ports und Case — fremde Domains fliegen weiterhin raus, dieselbe Site unter Schreibweise-Drift wird erkannt. Einfach Sync-Button auf betroffenen Sites nochmal klicken. consenta_customer-Session-Cookie auf consenta.io trägt jetzt eine HMAC-SHA256-Signatur via wp_salt('auth') + per-Install-Pepper. Vorher war es base64-kodiertes JSON ohne Integritätsschutz — eine bekannte Customer-E-Mail hätte Session-Spoofing erlaubt. 30-Tage-Migrationsfenster: bestehende Sessions bleiben gültig, neue werden sofort signiert. /dkey) und die White-Label-Konfig-Sync (wl_config_save/wl_config_get) verifizieren jetzt zusätzlich zur Lizenz-Key-Authentifizierung, dass die anfragende site_url in der Activation-Liste der Lizenz hinterlegt ist. Plus Per-Lizenz-Rate-Limit (5–60 Requests/Stunde je nach Endpoint). Schließt Risiken für den Fall, dass ein Lizenz-Key über Support-Mails, Screenshots oder Backups abhandenkommt. amount=0,00 zu „upgraden". Ebenfalls geschlossen: der öffentliche ?action=addon_activate-URL-Handler (kostenloses White-Label-Addon-Aktivieren bei Wissen eines aktiven Lizenz-Keys); Addon-Aktivierung läuft jetzt ausschließlich aus signaturverifizierten Webhook-Events. consenta_check_order antwortet jetzt nur mit Status + zugehöriger E-Mail-Adresse. Lizenz-Keys werden ausschließlich in der Bestätigungs-E-Mail an die Bestelladresse zugestellt. Schließt einen Datenexpositionspfad, der bei bekanntem order_ref den Lizenz-Key herausgegeben hätte. hash_equals() gegen Timing-Oracle-Angriffe. $wpdb->esc_like() auf User-Suchen schließt LIKE-Wildcard-Tricks. /stats-Aggregat-Queries (total consents, accept-rate, daily/geo-Charts) werden jetzt 5 Minuten gecached. Dashboards mit 10+ angebundenen Remote-Sites laden dadurch spürbar schneller, und der Lizenzserver wird weniger angepingt. uninstall-Hook entfernt jetzt auch Warmup-Queue-Optionen und löscht den License-Validate-Cron. consenta_options-Key über Settings::set/save, In-Memory-Cache wird mitaktualisiert. consenta_save_paddle_txn setzt eine transaction_id nur noch wenn das Feld noch leer ist (kein Override eines bereits gesetzten Werts). Verhindert Audit-Trail-Korruption und stillschweigendes Order-Laundering im Edge-Fall, dass mehrere Calls für dieselbe Bestellung eingehen. crete-round, roboto-flex, playfair-display-sc …). Consenta leitet den Family-Namen aus dem Slug ab und lädt ihn beim nächsten Speichern. Existiert die Schrift nicht, kommt eine konkrete Fehlermeldung. localStorage.consenta_services) zwar granular gespeichert — aber für den User unsichtbar und nur durch Cookie-Löschen revokierbar. Jetzt klar erkennbar und mit einem Klick zurücknehmbar (Iframes werden wieder durch den Placeholder ersetzt). languages/-Ordner nach Installation von 10 MB auf 4,4 MB. Wir versenden ab jetzt nur noch die compiled .mo-Files (das was WordPress zur Laufzeit liest) und das .pot-Template. Die .po-Source-Dateien (~6 MB, Editor-Format für Übersetzer) sind aus dem Distributions-ZIP raus — funktional ist 100 % erhalten. Verbessert Update-Zeiten und Hosting-Footprint spürbar. cURL error 60: SSL certificate problem (typisch auf MAMP/XAMPP/Local-by-Flywheel oder hinter Corporate-Proxy mit kaputtem CA-Bundle) wird der Download genau einmal mit sslverify=false wiederholt. Risiko ist überschaubar: heruntergeladen werden statische CSS- und woff2-Files, woff2-URLs werden gegen fonts.gstatic.com whitelist-geprüft, keine Credentials im Spiel. Function is_feed was called incorrectly. Conditional query tags do not work before the query is run. behoben: is_feed()-Aufrufe in Blocker und TagManager werden jetzt mit did_action('parse_query') gegated. Beseitigt Konflikte mit IDE-Plugins wie WPCodeBox, die sich am selben Hook anhängen und solche Warnings auswerten. label{display:inline} aus forms.css schlug das Inline-style="display:flex"; jetzt mit eigenen CSS-Klassen + !important gehärtet. Gleichzeitig der Filter (Suche + Kategorie) wieder funktional, nachdem die !important-Hardening-Regel das vorherige style.display='none'-Hiding ausgehebelt hatte — neue .is-hidden-Klasse löst das sauber. str_replace " "→"+" gefolgt von rawurlencode() codete + als %2B — Google interpretierte die Family-Namen wörtlich und antwortete mit HTTP 400 → keine @font-face-Definitionen → alles fiel auf system-ui zurück. wp-content/uploads/consenta-fonts/{slug}/ herunter. Das Frontend liefert die Schrift dann ausschließlich von deiner eigenen Domain — null Anfragen an fonts.googleapis.com / fonts.gstatic.com. Damit ist das LG-München-Urteil 2022 zu Google Fonts (3 EO 1361/21) automatisch sauber abgedeckt: keine IP-Adressen-Übermittlung an Google, keine Einwilligungspflicht, keine Abmahn-Falle. Lizenz-Datei (OFL/Apache-2.0/Ubuntu) wird beim Download mitgespeichert. admin-texts.json, das via gettext-Filter die ausgelieferten po/mo überschreibt — vorher waren viele po/mo-Strings noch Google-Translate-Output mit teilweise grob falschen Begriffen (z. B. „Toggle anzeigen" statt „Impressum anzeigen" auf Ukrainisch). TypeError behoben: Helper::localize_lifespan() akzeptiert jetzt auch Multi-Language-Lifespan-Arrays ({de: "6 Monate", en: "6 months", …}). Vorher crasht der Dialog auf Sites mit Cookie-Datenbank-Einträgen, deren lifespan-Feld als Array statt String abgespeichert wurde — die ganze Frontend-Auslieferung blockierte mit weißer Seite. consenta_force_frontend_output als Escape-Hatch für Edge-Cases: erzwingt das Laden der Frontend-Assets auch dann, wenn die automatische Maintenance-/Staging-Erkennung normalerweise blockieren würde. Hilfreich in exotischen Deployment-Setups. wp_footer() auf manchen Templates überspringen (Elementor Canvas, FSE Blank Templates, einige Landing-Page-Builder): zusätzliche Fallback-Hooks auf wp_body_open und shutdown garantieren die zuverlässige Auslieferung des Consent-Dialogs — doppelte Injektion ist via Static-Flags ausgeschlossen. WhiteLabel::is_licensed() verlangt jetzt explizit das white_label-Addon im Lizenz-Status — Agency-Tier allein reicht nicht mehr aus, um das Branding-Override zu aktivieren. Schließt eine Bypass-Lücke, bei der Agency-Lizenzen das Addon ohne Kauf nutzen konnten. /en/-Unterseiten (wo das Theme template_redirect mit exit abbricht um URL-slug-Mappings aufzulösen). Output-Hooks (wp_head, wp_footer, wp_body_open, shutdown) werden jetzt bereits bei Plugin-Init registriert statt innerhalb von template_redirect — überlebt aggressive Theme-Routen. Gate-Checks (Preview-Mode, URL-Exclusions) wandern in eine zentrale is_suppressed()-Methode. wp_remote_post schickt den Key jetzt zusätzlich als Query-Parameter — defensiv gegen 301/302-Redirects die POST in GET verwandeln und Body verwerfen (vorher: „Lizenz nicht gefunden"). redirection => 0 auf redirection => 3 erhöht, damit kanonische WordPress-Redirects (trailing-slash, http→https, WAF-Rewrites) die Statistik-Abfrage nicht mehr stumm killen. HTTP-Fehlercodes werden zu konkreten deutschen Fehlermeldungen übersetzt (401/403/404/429/5xx). consent_type-Spalte — läuft jetzt unabhängig vom DB_VERSION-Gate, verhindert stumme INSERT-Failures wenn Versionstracking drift html[lang]-Selektor versteckt falsche Sprachblöcke auch wenn Server-Side-Stripping versagt consenta_auth) für server-authentifizierte Consent-Verifizierung — ersetzt den schwachen djb2-Hash title-Attribut sichtbar style-Attribut aus Consent-Text-Sanitization-Allowlist entfernt wp_safe_redirect() statt wp_redirect() im Dismiss-Rescan-Flow url() korrekt escaped