oEmbed steuern (in WP)
In WordPress kannst du oEmbed auf 2 Ebenen steuern:
- was WordPress selbst einbetten darf
- wo auf deiner Seite fremde Inhalte eingebettet werden dürfen
1. Welche Anbieter WordPress per oEmbed akzeptiert
WordPress unterstützt standardmäßig bestimmte Provider, z. B. YouTube, Vimeo usw.
Anzeigen, welche Provider aktiv sind
Per Code kannst du die oEmbed-Providerliste beeinflussen.
Beispiel in functions.php oder besser in einem kleinen Plugin:
add_action('init', function () {
global $wp_oembed;
echo '<pre>';
print_r($wp_oembed->providers);
echo '</pre>';
});
Das ist nur zum Testen sinnvoll.
2. Bestimmte oEmbed-Provider entfernen
Wenn du z. B. verhindern willst, dass Inhalte von Twitter/X oder Vimeo automatisch eingebettet werden:
add_action('init', function () {
wp_oembed_remove_provider('#https?://(www\.)?twitter\.com/.+#i');
wp_oembed_remove_provider('#https?://(www\.)?x\.com/.+#i');
wp_oembed_remove_provider('#https?://(www\.)?vimeo\.com/.+#i');
});
Je nach WP-Version können die Regex-Muster leicht abweichen.
3. Eigene Provider hinzufügen
Wenn du willst, dass WordPress auch URLs eines eigenen Dienstes per oEmbed verarbeitet:
add_action('init', function () {
wp_oembed_add_provider(
'#https?://example\.com/watch/.+#i',
'https://example.com/oembed',
true
);
});
- erstes Argument = URL-Muster
- zweites = oEmbed-Endpunkt
- drittes = Regex ja/nein
4. Auto-Embed komplett abschalten
Wenn du nicht willst, dass WordPress nackte URLs automatisch in Embeds umwandelt:
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
Damit werden einfache URLs im Content nicht mehr automatisch eingebettet.
5. REST/oEmbed-Endpunkte deaktivieren
Wenn du verhindern willst, dass deine WordPress-Seite selbst als oEmbed-Provider arbeitet oder oEmbed-Endpunkte bereitstellt:
remove_action('rest_api_init', 'wp_oembed_register_route');
add_filter('embed_oembed_discover', '__return_false');
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
Das ist eher sinnvoll, wenn du oEmbed aus Sicherheits-, Datenschutz- oder Performance-Gründen einschränken willst.
6. Nur bestimmte Embeds im Editor erlauben
Wenn du gezielt steuern willst, welche URLs Autoren einfügen dürfen, kannst du beim Speichern oder Rendern prüfen, ob eine URL auf einer Allowlist steht.
Einfaches Beispiel:
add_filter('pre_oembed_result', function ($result, $url, $args) {
$allowed = [
'youtube.com',
'youtu.be',
'vimeo.com',
];
$host = wp_parse_url($url, PHP_URL_HOST);
if (!$host) {
return false;
}
foreach ($allowed as $domain) {
if (str_contains($host, $domain)) {
return $result;
}
}
return '<p>Einbettung dieses Anbieters ist nicht erlaubt.</p>';
}, 10, 3);
Sauberer wäre eine exakte Host-Prüfung statt str_contains().
7. Datenschutz: Embeds nur nach Klick laden
Wenn es dir auch um DSGVO geht, solltest du Embeds nicht sofort laden, sondern erst nach Zustimmung oder Klick. Das betrifft vor allem:
- YouTube
- Vimeo
- Spotify
- X/Twitter
Dafür gibt es:
- Consent-Plugins
- lokale Platzhalterlösungen
- 2-Klick-Lösungen
Praxis: Was du wahrscheinlich meinst
Wenn du fragst „wie kann ich steuern, was in WordPress per oEmbed eingebunden wird?“, meinst du meistens eines von diesen drei Zielen:
A) Nur bestimmte Anbieter erlauben
→ Provider entfernen oder Allowlist bauen
B) Automatische Einbettung ganz verhindern
→ autoembed entfernen
C) Datenschutz / Performance verbessern
→ oEmbed-Endpunkte und Auto-Discovery deaktivieren, ggf. mit Klicklösung
Empfohlene saubere Lösung
Wenn du nur bestimmte Embeds erlauben willst, würde ich so vorgehen:
- Autoembed aktiv lassen
- unerwünschte Provider entfernen
- optional nur Allowlist-Domains erlauben
- für externe Medien Consent/Klicklösung nutzen