=== GDPR Content Blocker === Contributors: lucasorth Tags: dsgvo, gdpr, consent, iframe, datenschutz, gdpr-content-blocker Requires at least: 6.0 Tested up to: 6.7 Requires PHP: 8.1 Stable tag: 1.0.0 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html DSGVO-konformer Consent-Blocker für externe iframes. Schlanke Alternative zu schweren Consent-Tools. == Description == Content Blocker verhindert, dass externe Dienste (Google Maps, YouTube, OpenStreetMap, Bewerbungsportale etc.) Daten übertragen, bevor der Nutzer aktiv eingewilligt hat. Kein iframe sendet vor dem Klick eine einzige Anfrage an den Drittserver. **Features:** * Granulare Einwilligung pro Dienst (localStorage, je ein Key pro Service-ID) * Art. 13 DSGVO-konformer Platzhalter: Anbieter, Empfänger, Zweck, Drittlandhinweis, Datenschutzlink * Widerruf per Shortcode `[content_blocker_revoke]` — so einfach wie die Einwilligung (Art. 7 Abs. 3) * Auto-Erkennung via DOMDocument (keine Regex-HTML-Parsing) * Vorlagen für Google Maps, YouTube, OpenStreetMap, Vimeo (Ein-Klick, voll editierbar) * Webseiten-Scan: listet alle eingebundenen Drittanbieter-Ressourcen auf (erfordert Lizenz) * Platzhalter übernimmt automatisch die Höhe des eingebetteten Elements (kein Layout-Sprung) * Manueller Shortcode `[content_blocker id="google-maps"]...[/content_blocker]` * Stabile CSS-Klassen für vollständige Gestaltungsfreiheit per Custom-CSS * Keine externen Abhängigkeiten, kein CDN, kein Composer * PHP 8.1+, WordPress 6.0+ == Shortcodes == **Dienst blockieren:** `[content_blocker id="google-maps"][/content_blocker]` **Widerruf für externe Inhalte (für Datenschutzerklärung):** `[content_blocker_revoke]` Rendert standardmäßig einen Text-Link. Betrifft nur die Freigabe externer Einbettungen (nicht die Cookie-Einwilligung eines separaten Cookie-Plugins). Optionen: `text="…"`, `style="link|button"`, `note="yes|no"`. **Übersicht aller blockierten Dienste (für Datenschutzerklärung):** `[content_blocker_services]` == CSS-Klassen == | Klasse | Beschreibung | |---|---| | `.cb-blocker` | Wrapper / Platzhalter-Hintergrund | | `.cb-blocker__inner` | Innerer Container (zentriert) | | `.cb-blocker__text` | Hinweistext | | `.cb-blocker__recipient` | Empfänger / Drittlandzeile | | `.cb-blocker__purpose` | Zweck | | `.cb-blocker__third-country` | Drittland-Warnhinweis | | `.cb-blocker__privacy-link` | Link zur Anbieter-DSE | | `.cb-blocker__button` | Lade-Button | | `.cb-revoke-btn` | Widerrufs-Button | CSS Custom Properties (via `:root`): `--cb-text`, `--cb-bg`, `--cb-btn-bg`, `--cb-btn-text`, `--cb-btn-hover-bg`, `--cb-btn-hover-text` Hinweis zur Spezifität: Die Plugin-Regeln sind unter `.cb-blocker` verschachtelt (z. B. `.cb-blocker .cb-blocker__button`), damit Theme-Styles sie nicht überschreiben. Ihr Custom-CSS wird DANACH geladen und überschreibt alles — verwenden Sie zur Sicherheit denselben Präfix, z. B. `.cb-blocker .cb-blocker__button { ... }`. == Updates == Updates werden über den eigenen Lizenzserver ausgeliefert und nur an Seiten mit aktiver Lizenz angeboten. Der Update-Hinweis erscheint wie gewohnt unter Plugins → Installierte Plugins. Ohne aktive Lizenz wird kein Update angeboten. Veröffentlichung (für den Betreiber): Plugin-ZIP per Gitea-Actions (Tag `v*`) oder manuell per curl an den Endpoint `POST /api/v1/releases` des Backends laden. Die ZIP muss einen Ordner `gdpr-content-blocker/` auf oberster Ebene enthalten. == Bekannte Grenzen == * Auto-Erkennung greift nur auf iframes im initialen Server-HTML. Durch JavaScript nachgeladene iframes werden nicht automatisch erkannt. Für diese Fälle den manuellen Shortcode verwenden. == Changelog == = 1.0.0 = * Erstveröffentlichung == Upgrade Notice == = 1.0.0 = Erstveröffentlichung.