- Plugin: Header-Version + CB_VERSION -> 1.7.0 - readme.txt: Stable tag 1.7.0, Features aktualisiert (skript-blockierung, consent-shortcode, textausrichtung, ganzseitiger scan, kein weissraum, ...), changelog-eintrag 1.7.0 + upgrade notice - Backend package.json -> 1.7.0 - Doku-beispiele (README.md, SPICKZETTEL.md, license-backend/README.md) auf 1.7.0 angeglichen Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
141 lines
6.9 KiB
Plaintext
141 lines
6.9 KiB
Plaintext
=== 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.7.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:**
|
|
|
|
* Echtes Click-to-Load: vor der Einwilligung keine Verbindung zum Drittanbieter, keine Datenübertragung
|
|
* Granulare Einwilligung pro Dienst (localStorage, je ein Key pro Service-ID)
|
|
* Art. 13 DSGVO-konformer Platzhalter: Anbieter, Empfänger, Zweck, Drittlandhinweis, Datenschutzlink
|
|
* Drittanbieter-Skripte blockieren — auch per JavaScript nachgeladene (z. B. YouTube-/Vimeo-API, Tracking-Skripte), optional auch von der eigenen Domain
|
|
* Auto-Erkennung von iframes (server-seitig via DOMDocument) und JS-Einbettungen (Slider, Elementor-Videos inkl. e-youtube-/e-vimeo-Element, Gutenberg-oEmbed)
|
|
* Vorlagen für Google Maps, YouTube, OpenStreetMap, Vimeo (Ein-Klick, voll editierbar)
|
|
* Webseiten-Scan: durchsucht die gesamte Website (alle Seiten/Beiträge) und listet alle Drittanbieter-Ressourcen samt Fundseiten auf (erfordert Lizenz)
|
|
* Widerruf per Shortcode `[content_blocker_revoke]` (Art. 7 Abs. 3); Einwilligungs-Button `[content_blocker_consent]` für reine Skript-Dienste
|
|
* Platzhalter exakt so hoch wie sein Inhalt (kein Weißraum); das Element lädt nach der Einwilligung in Originalgröße
|
|
* Textausrichtung wählbar (mittig/links/rechts), Farben frei einstellbar, eigenes Custom-CSS; Theme überschreibt nichts
|
|
* Manueller Shortcode `[content_blocker id="google-maps"]...[/content_blocker]`
|
|
* Lizenz- und Update-Auslieferung über eigenen Server; Sprachen: Deutsch + Englisch
|
|
* Keine externen Abhängigkeiten, kein CDN, kein Composer
|
|
* PHP 8.1+, WordPress 6.0+
|
|
|
|
== Shortcodes ==
|
|
|
|
**Dienst blockieren:**
|
|
`[content_blocker id="google-maps"]<iframe src="https://maps.google.com/..." ...></iframe>[/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]`
|
|
|
|
**Einwilligungs-Button (für reine Skript-Dienste ohne sichtbaren Platzhalter):**
|
|
`[content_blocker_consent id="dienst-id" text="…" style="button|link"]`
|
|
Erteilt die Einwilligung für den angegebenen Dienst und lädt die Seite neu.
|
|
Die ID steht im Backend unter jedem Dienst (klein unter dem Namen).
|
|
|
|
== 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.
|
|
|
|
== Erkennung ==
|
|
|
|
* Server-seitig: iframes im initialen HTML werden anhand der Erkennungsmuster blockiert.
|
|
* Client-seitig (automatisch): per JavaScript nachgeladene iframes (z. B. Slider) sowie
|
|
Elementor-Video-Widgets werden erkannt und durch den Platzhalter ersetzt.
|
|
|
|
== Bekannte Grenzen ==
|
|
|
|
* Client-seitige Erkennung ist „best effort": Bei per JS nachgeladenen iframes kann im
|
|
Einzelfall ein bereits gestarteter Request nicht garantiert verhindert werden. Für
|
|
maximale Rechtssicherheit den manuellen Shortcode verwenden.
|
|
* Bei Elementor-Videos mit Bild-Overlay kann das Vorschaubild (z. B. von ytimg.com) als
|
|
CSS-Hintergrund bereits beim Laden angefragt werden. Empfehlung: in Elementor das
|
|
Bild-Overlay deaktivieren oder ein eigenes Vorschaubild verwenden.
|
|
|
|
== Changelog ==
|
|
|
|
= 1.7.0 =
|
|
* Drittanbieter-Skripte blockieren (auch per JavaScript nachgeladene wie die YouTube-/Vimeo-API und Tracking-Skripte; optional auch von der eigenen Domain)
|
|
* Neuer Shortcode `[content_blocker_consent]` (Einwilligungs-Button für reine Skript-Dienste)
|
|
* Textausrichtung des Platzhalters wählbar (mittig/links/rechts)
|
|
* Werbe-Badge mit Link zur Produktseite (mit aktiver Unlimited-Lizenz ausblendbar)
|
|
* Verbesserte Elementor-Erkennung inkl. neuem e-youtube-/e-vimeo-Element; Video lädt nach Einwilligung in Originalgröße
|
|
* Webseiten-Scan deckt jetzt die gesamte Website ab (alle Seiten/Beiträge), parallele Abfrage
|
|
* Platzhalter exakt so hoch wie sein Inhalt (kein Weißraum mehr)
|
|
* Kein Nachladen von WordPress-Emoji-Grafiken mehr (s.w.org)
|
|
* Dienst-ID im Backend sichtbar; „Lizenz upgraden" öffnet eine vorausgefüllte E-Mail
|
|
* Plugin-Icon; diverse Darstellungs- und Hover-Korrekturen (Tabs, Button, Links)
|
|
|
|
= 1.2.0 =
|
|
* Shortcodes in eigenen Tab; „Über das Plugin"-Tab
|
|
* Belegte Domains als Liste mit Papierkorb; Lizenz-Status live aktualisiert
|
|
* Pfeil-Icon zum Ein-/Ausklappen; diverse UI-Korrekturen
|
|
* Cache-Busting der Admin-Skripte
|
|
|
|
= 1.1.0 =
|
|
* Vorlagen für Google Maps, YouTube, OpenStreetMap, Vimeo
|
|
* Client-seitige Erkennung (Elementor-Videos, per JS nachgeladene iframes)
|
|
* Webseiten-Scan mit Vorlagenerkennung und Quellseiten
|
|
* Dienste ein-/ausklappbar mit An-/Aus-Schalter
|
|
* Lizenz- und Update-Auslieferung über eigenen Server
|
|
* Sprachen: Deutsch + Englisch
|
|
* Widerruf als Link; Tab „Über das Plugin"; diverse UI-Verbesserungen
|
|
|
|
= 1.0.0 =
|
|
* Erstveröffentlichung
|
|
|
|
== Upgrade Notice ==
|
|
|
|
= 1.7.0 =
|
|
Skript-Blockierung (inkl. YouTube-/Vimeo-API), ganzseitiger Scan, kein Weißraum im Platzhalter und diverse Darstellungs-Korrekturen.
|
|
|
|
= 1.0.0 =
|
|
Erstveröffentlichung.
|