Matthias Altmann
Systemberater

DSGVO-konforme externe Inhalte

MA Content Consent
MA Content Consent
Aktuelle Version: 2.0.0 (12. Mai 2026)

Auch verfügbar speziell für Vimeo und YouTube!

Einführung

Auf vielen Websites werden externe Inhalte, wie beispielsweise Google Karten oder Buchungssysteme eingebunden.

Nutzt man hierzu die in WordPress (Classic Editor, Gutenberg) oder Page Buildern (Beaver, Bricks, Divi, Elementor, Oxygen, WPBakery und viele andere) vorgesehenen Standard-Verfahren und fragt nicht vorher die Zustimmung des Besuchers ab, verstößt man in der EU gegen die Datenschutzrichtlinien (DSGVO, GDPR): Bei der Anzeige einer Seite, die Inhalte von einem externen Server nachlädt, wird automatisch eine Verbindung zu diesem Server aufgebaut. Dabei werden die IP-Adresse, Browser-Informationen und weitere Daten des Besuchers, und damit personenbezogene Information, an den externen Server übertragen. Das ist nicht erlaubt ohne explizite Zustimmung.

Wie kann man also externe Inhalte auf der Website DSGVO-konform einbinden?

Lösung

MA Content Consent stellt einen WordPress Shortcode zur Verfügung, der eine DSGVO-konforme und gleichzeitig möglichst einfache und effiziente Einbettung von externen Inhalten ermöglicht.

Mittels dieses Shortcodes wird zunächst ein Hinweis-Text und ein Zustimmungs-Button angezeigt. Erst nach Klick durch den Besucher wird der externe Inhalt geladen. Dieses Verfahren ist DSGVO-konform, weil der Besucher zunächst aktiv bestätigen muss, dass er die externen Inhalte laden will.

MA Content Consent wirkt sich auch deutlich positiv auf die Ladegeschwindigkeit der Seite, und damit auch auf die bekannten Speed Test Tools (Page Speed Insights, GTMetrix, …) aus, da keine Daten von externen Servern geladen werden, bevor der Besucher dem nicht zugestimmt hat.

Warum als Shortcode?

Die Verwendung eines Shortcodes ist die vielseitigste Methode, um die Verfügbarkeit im gesamten WordPress-Ökosystem sicherzustellen.

  • Universelle Kompatibilität: Shortcodes funktionieren nahtlos im Classic Editor, in Gutenberg (Block-Editor) und in beliebten Page-Buildern wie Beaver, Bricks, Divi, Elementor, Oxygen, WPBakery und vielen anderen.
  • Theme-Flexibilität: Im Gegensatz zu fest programmierten Skripten können Shortcodes in Widgets, Seitenleisten oder benutzerdefinierten Vorlagen platziert werden, wodurch die Funktionalität unabhängig vom Layout des Themes gewährleistet ist.
  • Einfachheit & Geschwindigkeit: Es bietet eine schlanke „Kopieren-Einfügen“-Lösung, mit der komplexe Logik ausgelöst werden kann, ohne eine einzige Zeile Code schreiben zu müssen.
  • Zukunftssicher: Selbst wenn das Theme oder der Editor gewechselt wird, bleibt der Shortcode funktionsfähig, sodass die externen Inhalte ohne zusätzliche Konfiguration verfügbar bleiben.
  • Detaillierte Steuerung: Dank dutzender Parameter innerhalb des Shortcodes können Aussehen und Funktionalität – wie Abmessungen, Texte, Metadaten – für jedes einzelne Video präzise gesteuert werden.

Shortcode

Der Shortcode besteht aus einem öffnenden und einem schließenden Tag. Dazwischen wird der zu bestätigende Inhalt eingebettet.

[ma-content-consent] 

externer Inhalt

[/ma-content-consent]

Hier ein Beispiel für die Einbettung einer Google Karte:

[ma-content-consent] 

<iframe src="https://www.google.com/­maps/embed?pb=..." width="100%" height="300" 
style="border:0;" allowfullscreen="" loading="lazy"></iframe>

[/ma-content-consent]

Auf der Seite wird nun zunächst ein Hinweis-Text mit Link zur Datenschutzerklärung angezeigt. Darunter fordert ein Button die Zustimmung vom Besucher an, die externen Inhalte zu laden. Erst nach Klick auf den Button wird tatsächlich eine Verbindung zum externen Server aufgebaut und der eigentliche Inhalt geladen und angezeigt.

Funktionsweise und HTML Struktur

MA Content Consent erzeugt einen Zustimmungsdialog aus drei Hauptelementen: Container, Notice, Content.
Der Container ist das äußere Hauptelement.
Darin wird die Notice, also der Datenschutzhinweis, bestehend aus Text und Button, angezeigt.
Darunter ist im anfänglich nicht sichtbaren Content der eigentliche Inhalt in kodierter Form abgelegt.

Bei Zustimmung durch den Besucher wird die Notice entfernt, und durch den anfänglich nicht sichtbaren Content ersetzt.

Struktur vor Zustimmung

Struktur nach Zustimmung

Shortcode Parameter

MA Content Consent implementiert ein recht einfaches Design für den Hinweis-Text und den Button.
Mittels Shortcode-Parametern kann das Aussehen beeinflusst werden.

id

Mit dem Parameter id kann eine eigene HTML ID für diesen Zustimmungsdialog vergeben werden.
Das ist in bestimmten Anwendungsfällen hilfreich, um einen Dialog gezielt per CSS oder JavaScript zu adressieren.

alt / title

Die Parameter alt und title setzen die entsprechenden HTML Attribute für den äußeren Container des Zustimmungsdialoges.
Das Attribut alt dient der Unterstützung von Suchmaschinen und der Barrierefreiheit, das Attribut title stellt den Tooltip Text bereit.

Beispiel:

[ma-content-consent alt="Externer Inhalt" title="Externer Inhalt"] ... [/ma-content-consent]

container-style

Der äußere Container hat standardmäßig grundlegende CSS Styles zugewiesen:

display: flex;
flex-direction: column;

Mit dem Shortcode-Parameter container-style können diese CSS Styles überschrieben oder ergänzt werden.

Beispiel:

[ma-content-consent container-style="min-height: 300px;"] ... [/ma-content-consent]

container-class

Sollen mehrere Zustimmungs-Blöcke ein identisches Container Design erhalten, können mit dem Parameter container-class eigene CSS Klassen zugewiesen werden.

Beispiel:

[ma-content-consent container-class="my-consent-container featured"] ... [/ma-content-consent]

notice-style

Der Notice Block, der den Datenschutz-Text und den Button enthält, hat standardmäßig grundlegende CSS Styles zugewiesen:

position: relative;
isolation: isolate;
flex: 1;
padding: 1em;
display: flex;
flex-direction: column;
flex-wrap: wrap;
gap: 2em;
justify-content: center;
background-color: #efefef;
border: 1px solid lightgray;
text-align: center;

Mit dem Shortcode-Parameter notice-style können diese CSS Styles überschrieben oder ergänzt werden.

Beispiel:

[ma-content-consent notice-style="color: maroon;"] ... [/ma-content-consent]

notice-class

Sollen mehrere Zustimmungs-Blöcke ein identisches Notice Design erhalten, können mit dem Parameter notice-class eigene CSS Klassen zugewiesen werden.

Beispiel:

[ma-content-consent notice-class="my-consent-notice featured"] ... [/ma-content-consent]

block-style

Dieser Parameter wurde früher für das Design des Containers verwendet, und wurde jetzt durch container-style abgelöst.
Ist dieser Parameter aus der früheren Verwendung des Snippets noch definiert, überschreibt er aus Kompatibilitäsgründen container-style und notice-style.

block-class

Dieser Parameter wurde früher für das Design des Containers verwendet, und wurde jetzt durch container-class abgelöst.
Ist dieser Parameter aus der früheren Verwendung des Snippets noch definiert, überschreibt er aus Kompatibilitäsgründen container-class und notice-class.

gdpr-text

MA Content Consent stellt den Hinweis-Text zu den Datenschutzrichtlinien in verschiedenen Sprachen bereit:

SpracheText
DANår du har trykket, vil indholdet blive hentet fra eksterne servere. Se vores {privatlivspolitik} for flere informationer.
DEBei Klick wird dieser Inhalt von externen Servern geladen. Details siehe {Datenschutzerklärung}.
ENWhen clicked, this content is loaded from external servers. See our {privacy policy} for details.
ESAl hacer clic, este contenido se carga desde servidores externos. Consulte la {política de privacidad} para más detalles.
FIKun tätä sisältöä napsautetaan, se ladataan ulkoisilta palvelimilta. Lisätietoja on {tietosuojaselosteessa}.
FREn cliquant, ce contenu est chargé depuis des serveurs externes. Voir la {politique de confidentialité}.
HUHa rákattint, ez a tartalom külső szerverekről töltődik be. A részletekért olvassa el az {Adatkezelési Tájékoztatót} oldalt.
ITQuando viene cliccato, questo contenuto viene caricato da server esterni. Vedere {l’informativa sulla privacy} per i dettagli.
JAクリックすると、このコンテンツが外部サーバーから読み込まれます。詳細については、{プライバシー ポリシー} をご覧ください。
NLNa het klikken wordt deze inhoud geladen vanaf externe servers. Zie ons {privacybeleid} voor meer informatie.

Die Sprache wird basierend auf der Sprache der Website oder Seite ausgewählt. Polylang wird unterstützt.
Wenn kein Standardtext für die Sprache der Seite verfügbar ist, wird stattdessen Englisch verwendet.

Der Begriff in geschweiften Klammern wird durch einen Link zur in WordPress konfigurierten Seite zur Datenschutzerklärung (Einstellungen > Datenschutz) ersetzt, wobei der geklammerte Begriff als Link-Text verwendet wird.

Der Hinweis-Text kann per Parameter gdpr-text an die eigenen Anforderungen, beispielsweise andere Sprachen, angepasst werden.

[ma-content-consent gdpr-text="Bitte lesen Sie vor dem Klick zuerst die {Datenschutzerklärung}."] ... [/ma-content-consent]

text-style

Der Hinweis-Text hat standardmäßig keine spezifischen CSS Styles zugewiesen.

Mit dem Shortcode-Parameter text-style können CSS Styles hinzugefügt werden.

Beispiel:

[ma-content-consent text-style="color: firebrick; font-weight: 900;"] ... [/ma-content-consent]

text-class

Sollen die Texte in mehreren Zustimmungs-Blöcken ein identisches Design erhalten, können mit dem Parameter text-class eigene CSS Klassen zugewiesen werden.

Beispiel:

[ma-content-consent text-class="my-text featured"] ... [/ma-content-consent]

button-text

MA Content Consent stellt Button-Beschriftung in verschiedenen Sprachen bereit:

SpracheText
DAIndlæs eksternt indhold
DEExternen Inhalt laden
ENLoad external content
ESCargar contenido externo
FILataa ulkoista sisältöä
FRCharger le contenu externe
HUKülső tartalom betöltése
ITCaricare il contenuto esterno
JA外部のコンテンツを読み込ませます。
NLExterne inhoud laden

Die Sprache wird basierend auf der Sprache der Website oder Seite ausgewählt. Polylang wird unterstützt.
Wenn kein Standardtext für die Sprache der Seite verfügbar ist, wird stattdessen Englisch verwendet.

Die Button-Beschriftung kann per Parameter button-text an die eigenen Anforderungen, beispielsweise andere Sprachen, oder bezogen auf die zu ladenden Inhalte angepasst werden.

Beispiel:

[ma-content-consent button-text="Karte laden"] ... [/ma-content-consent]

button-style

Der Button hat standardmäßig grundlegende CSS Styles zugewiesen:

margin-inline: auto;
width: fit-content;
border-style: none;
border-radius: 1.5em;
background-color: #333;
padding: 0.5em 1em;
color: white;
text-decoration: none;

Mit dem Shortcode-Parameter button-style kann das Design des Buttons angepasst werden.

Beispiel:

[ma-content-consent button-style="background-color:#2a4b9b; padding:2px 10px; border-radius:5px;"] ... [/ma-content-consent]

button-class

Sollen die Buttons in mehreren Zustimmungs-Blöcken ein identisches Design erhalten, können mit dem Parameter button-class eigene CSS Klassen zugewiesen werden.

Beispiel:

[ma-content-consent button-class="my-button primary"] ... [/ma-content-consent]

background-image

Mit dem Shortcode-Parameter background-image kann dem Zustimmungsdialog ein Hintergrund-Bild zugewiesen werden.
Erlaubt ist hierbei die Angabe eines URL oder einer Media ID.

Beispiele:

[ma-content-consent background-image="/wp-content/..."]
...
[/ma-content-consent]
[ma-content-consent background-image="1234"]
...
[/ma-content-consent]

background-style

Der Hintergrund-Bereich hat standardmäßig grundlegende CSS Styles zugewiesen:

z-index: -1;
position: absolute;
inset: 0;
opacity: .5;
background-size: cover;
background-position: center center;
background-repeat: no-repeat;

Mit dem Shortcode-Parameter background-style kann das Design des Buttons angepasst werden.

Integrierte Hintergrund-Bilder

MA Content Consent liefert bereits einige integrierte Hintergrund-Bilder für typische Anwendungsfälle mit.
Diese können mit Tags in der Form @name zugewiesen werden.

[ma-content-consent background-image="@form"]
Beispiel-Inhalt
[/ma-content-consent]
[ma-content-consent background-image="@play"]
Beispiel-Inhalt
[/ma-content-consent]
[ma-content-consent background-image="@video"]
Beispiel-Inhalt
[/ma-content-consent]
[ma-content-consent background-image="@waveform"]
Beispiel-Inhalt
[/ma-content-consent]
[ma-content-consent background-image="@world""]
Beispiel-Inhalt
[/ma-content-consent]

Globale Parameter

Alle Shortcode Parameter können global definiert werden.
Das erleichtert die einheitliche Gestaltung der Zustimmungsdialoge und erspart die Definition der Parameter für jeden einzelnen Dialog.

Dazu wird eine globale Variable $GLOBALS['ma_content_consent'] als Array angelegt und mit den gewünschten Einstellungen versorgt.
Das geht recht einfach mit einem Code Snippet mit z.B. folgendem Inhalt:

$GLOBALS['ma_content_consent'] = [
 'background-image' => '@world',
 'container-style' => 'border: 1px solid blue;',
];

Eine Sonderlösung gilt hierbei für die Parameter gdpr-text und button-text, die sprach-sensitiv sind.
Die Angabe der globalen Parameter gdpr-text und button-text setzen den Text und die Button-Beschriftung global auf einheitliche Werte.
Die Ergänzung um ein Sprachkennzeichen steuert die Text-Ausgabe je Sprache.

$GLOBALS['ma_content_consent'] = [
 'gdpr-text' => 'Loading map from Google. Read the {privacy policy}.',
 'gdpr-text-de' => 'Karte wird von Google geladen. Siehe {Datenschutzerklärung}.',
 'button-text' => 'Load Map',
 'button-text-de' => 'Karte laden',
];

Einstellungen

WordPress Admin-Menü > Einstellungen > MA Content Consent zeigt die Administrations-Seiten, auf der die Voreinstellungen für die Shortcodes festgelegt werden können.

Shortcode Voreinstellungen

Auf dieser Seite können globale Voreinstellungen für die Shortcodes getroffen werden.
Wenn auf der gesamten Website beispielsweise ein bestimmtes Styling verwendet werden soll, kann dies hier zentral statt bei jedem einzelnen Shortcode als Parameter angegeben werden.
Diese zentralen Voreinstellungen können jedoch bei Bedarf bei einzelnen Shortcodes durch Parameter wieder überschrieben werden.

MA Content Consens Shortcode Presets
MA Content Consent – Shortcode Voreinstellungen.

Tipp:
Die Texte für gdpr-text und button-text können für bis zu 10 Sprachen vorgegeben werden.
Wird eine andere Sprache benötigt, kann eine bestehende Sprache einfach überschrieben werden.

Software Installation und Aktualisierung

Installation

Die Installation der Software kann mit unterschiedlichen Verfahren erfolgen:

Plugin:
Die Software steht als Plugin (ZIP Archiv) zur Verfügung und kann in WordPress als Plugin installiert werden.

Code Snippet:
Die Software ist als Code Snippet lauffähig.
Für die Plugins „Code Snippets“ und „Advanced Scripts“ wird eine JSON Datei zum Download angeboten, die dort direkt importiert werden kann.

PHP:
Die Software kann als PHP Datei herunter geladen werden.
Diese PHP Datei kann in anderen Code Snippet Plugins verwendet werden (den Code per Copy & Paste einfügen), oder in ein eigenes WordPress Child Theme eingebunden werden (require_once('path/to/the.php');).

Aktualisierung

Die Software prüft selbständig, ob Aktualisierungen verfügbar sind:

Plugin:
Die Aktualisierung folgt den bekannten WordPress Methoden: Alle 12 Stunden wird geprüft, ob eine neue Version verfügbar ist.
Das Update kann dann manuell, oder auch automatisch erfolgen.

MA Software Plugin Update Notice

Code Snippet & PHP:
Die Software implementiert eine spezielle Methode, die auch bei der Installation als Snippet oder PHP Include eine Prüfung auf Aktualisierungen durchführt. Das Prüfintervall ist, wie bei Plugins, auf 12 Stunden festgelegt.
Steht eine neuere Version zur Verfügung, wird dies im Admin Bereich als Hinweis eingeblendet:

MA Software Update Admin Notice

Download

Version 2.0.0 (12. Mai 2026)
Verfügbare Downloads
Installation als WordPress-Plugin
Import in das Plugin "Code Snippets"
PHP für andere Snippet-Plugins oder zur Verwendung als Include

Spenden ❤️

Es macht mir viel Freude, Software zu entwickeln und damit typische Anforderungen zu lösen.
Die Software stelle ich kostenfrei zur Nutzung zur Verfügung.
Wenn Du möchtest, kannst Du meine vielen Stunden Arbeit mit einer kleinen Kaffee-Spende über PayPal honorieren.

Bei Klick auf den Button wird eine Verbindung zu PayPal aufgebaut.

Spenden werden selbstverständlich ordnungsgemäß durch mich versteuert.

Disclaimer

Diese Software habe ich nach bestem Wissen und Gewissen entwickelt und getestet.
Ich stelle die Software zur freien Verwendung zur Verfügung.
Eine Garantie für die Funktionalität in allen denkbaren WordPress Umgebungen kann ich nicht geben. 
Download und Nutzung dieser Software erfolgen auf eigene Gefahr und Verantwortung.

Change Log

  • Version 2.0.0
    Verfügbare Downloads
    12. Mai 2026
    Erfordert mindestens WordPress: 5.8
    Getestet bis WordPress: 6.9.4
    Erfordert PHP: 7.4

    New Features:

    • Now available as Code Snippet, Include, and Plugin with automatic update check.
      For snippet or include, checks for updates every 12 hrs (same frequency used by WP for plugin updates),
      and shows update notice in admin area, dismissible for 12 hrs. Can also be checked manually on the Settings page.
      For plugin, WordPress standard update mechanism is used.
    • Settings > MA Content Consent
      • Configure presets values for shortcode parameters
    • New shortcode attributes 'id', 'background-style'
    • Attribute 'background-image' now also accepts a numeric value for media ID

    Changes:

    • Changed shortcode attribute name "text" to "gdpr-text", to match attribute name of my other gdpr plugins.
      Attribute name "text" is still supported as a fallback for existing setups, but will be removed in a future version.
    • Changed default text-site from .7em to 1em
    • Backgroudn image:
      • Moved background-image property from notice container to a new absolutely positioned div for opacity control
      • Added background-style parameter, default opacity .5
  • Version 1.3.2
    Verfügbare Downloads
    28. April 2025
    Erfordert mindestens WordPress: 5.3
    Getestet bis WordPress: 6.9
    Erfordert PHP: 7.4

    Changes:

    • Compatibility with WordPress 6.8: Button width/height
      (Thanks to Tobias Schmidt for reporting)
  • Version 1.3.1

    Download nicht verfügbar.
    1. März 2024

    Changes:

    • Content parser now collects scripts that might have been moved to head by DOMParser.
      (Thanks to Tobias Schmidt for reporting)
  • Version 1.3.0

    Download nicht verfügbar.
    19. Januar 2024

    Structural changes in V1.2.0 made styling the block, especially dimensions, way more complicated or even impossible.
    A new structure with container and notice blocks, and related attributes, now allows more specific styling.
    Also, the consented contents are not embedded in an additional div anymore.

    Changes:

    • New Attributes container-class, container-style, notice-class, notice-style
    • Attributes block-class and block-style are now deprecated.
      If still present, will replace container-class/style and notice-class/style
    • Default styles are now assigned to classes ma-content-consent-container and ma-content-consent-notice instead of inline CSS
    • Replace contents of container directly with nodes, not nested in an additional div

    New Features:

    • Added global configuration via $GLOBALS['ma_content_consent']
  • Version 1.2.0

    Download nicht verfügbar.
    30. Dezember 2023

    New Features:

    • Complete rebuild of JS
    • Added shortcode attributes alt, title
    • SVG backgrounds included: form, play, video, waveform, world.
      SVG symbols are only emitted to the page if used by a consent element.
    • Support for <script> tags embedded in hidden content
    • Support for dynamically embedded deferred content using AJAX calls
      • Removed init prevention for AJAX calls
      • Added PHP method MA_Content_Consent::enable_footercode() to trigger output of footer code (styles, scripts, svg) for consent dialogs dynamically loaded by AJAX calls
      • Added JS function ma_content_consent_init_click_handler() to initialize click handlers for dynamically created consent dialogs.
    • Optimizations for accessibility
  • Version 1.1.2

    Download nicht verfügbar.
    1. Februar 2023

    New Features:

    • Added Finnish translations for notice text and button label

    Changes:

    • Changed button tag from <a> to <span> to avoid Lighthouse SEO warning "Links not crawlable"

    Fixes:

    • Support for Oxygen Repeater (due to numbered IDs)
      (Thanks to André Slotta for reporting and supporting with code adaptions)
  • Version 1.1.1

    Download nicht verfügbar.
    15. November 2022

    New Features:

    • Added Japanese translations for notice text and button label
      (Thanks to Viorel-Cosmin Miron)
    • Added support for WPML
      (Thanks to Viorel-Cosmin Miron)
      Please note there's a WPML bug preventing the creation a policy link with the correct language
      (https://wpml.org/forums/topic/get_the_privacy_policy_link-should-be-translated/#post-8153387)

    Fixes:

    • Support for UTF-8 content in JS base64 decoding
      (Thanks to Tobias Przybilla for reporting)
  • Version 1.1.0

    Download nicht verfügbar.
    21. Oktober 2022

    New Features:

    • Added new shortcode parameters block-class, text-class, button-class

    Changes:

    • Migrated JavaScript from jQuery to vanilla JS (ES6) to eliminate jQuery dependency.
      (Thanks to André Slotta for the provided code sample)

    Fixes:

    • Removed double '.' for German GDPR text.
      (Thanks to Tobias Maximilian Hietsch for reporting)
  • Version 1.0.1

    Download nicht verfügbar.
    4. Februar 2022

    New Features:

    • Added Dansk translations for notice text and button label
      (Thanks to Theis L. Soelberg)
    • Evaluating nested shortcodes
      (Thanks to Anja Kretzer)
  • Version 1.0.0

    Download nicht verfügbar.
    3. Februar 2022

    Initial release

Download

Source Code