Bereite Inhalte aus einem anderen CMS / WYSIWYG auf den WordPress-Editor vor

Ich schreibe gerade ein Plugin, mit dem ich Inhalte von einem anderen Content Management System in WordPress importieren kann.

Fast alles funktioniert so, wie ich es möchte: Jeder Eintrag wird mit Titel, Inhalt und Bild gespeichert. Ich habe es sogar geschafft, Bilder im Inhaltsbereich zu übertragen und zu aktualisieren. Aber jetzt kämpfe ich mit einem letzten Problem.

Wenn ein eingebettetes Video (youtube / vimeo) im Inhalt vorhanden ist und ich es als iframe speichere, verhält es sich nicht genauso wie WordPress oEmbeds.

Wenn Sie eine URL im WordPress-Editor in ein Video einfügen, wird normalerweise der Einbettungscode für Sie erstellt, während die URL nur in der database gespeichert wird. Ich bin mir nicht wirklich sicher, wie das funktioniert, aber selbst wenn ich den iframe aus dem html entferne und nur die URL hinzufüge, muss ich trotzdem zum Beitrag gehen und update drücken, damit der iframe vorne funktioniert Ende.

Eine andere Sache, die ich realisiert habe, ist, dass WordPress nicht wirklich speichert

Tags zu der database, aber wenn ich die Daten von diesem anderen CMS einfüge, werden alle HTML-Tags mit ihm eingefügt (natürlich). Wenn ich dann auf den Post gehe und update drücke – werden alle Daten schön formatiert.

Gibt es eine function, die ich verwenden kann, um das rohe HTML, das von diesem anderen WYSISYG kommt, vorzubereiten, bevor es in der WordPress-database gespeichert wird? Oder gibt es eine Möglichkeit, die Einbettungen zu retten, damit sie funktionieren?

Ich habe das Gefühl, dass der WordPress-core beim Speichern vom Editor in die database eine function verwenden muss – aber ich kann nichts über eine solche function finden.

Jede Klärung zu diesem Thema wird begrüßt.

Solutions Collecting From Web of "Bereite Inhalte aus einem anderen CMS / WYSIWYG auf den WordPress-Editor vor"

Wickeln Sie die URL in den [embed] Shortcode ein. Dadurch wird WordPress gezwungen, seine oEmbed-Implementierung aufzurufen.

  [embed]https://www.youtube.com/watch?v=YE7VzlLtp-4[/embed] 

Oder, wenn Sie die Höhe / Breite steuern möchten

  [embed height="400" width="600"]https://www.youtube.com/watch?v=YE7VzlLtp-4[/embed] 

Beachten Sie, dass dies nur für Websites funktioniert, die die weiße Liste von Websites von wordpress darstellen . Sie können mithilfe von wp_embed_register_handler Sites zu dieser Liste wp_embed_register_handler

Bearbeiten
Wenn Sie überprüfen möchten, ob Ihr Provider in der Whitelist ist, könnte dies in Betracht gezogen werden (Hinweis: Ich habe das unten noch nie getestet):

  function prefix_is_whitelisted_embed($url){ require_once( ABSPATH . WPINC . '/class-oembed.php' ); if ( did_action( 'plugins_loaded' ) ) { //if you do this before plugins are loaded you may prevent other plugins from adding urls to the whitelist $oEmbed = _wp_oembed_get_object(); return $oEmbed->get_provider($url) === false?false:true; } } 

Diese function überprüft im Grunde, ob eine URL einen registrierten Provider hat, der das OEmbed-Objekt WP verwendet. Wenn dies der Fall ist, gibt die classnmethode get_provider() den Provider zurück. Wenn dies nicht der Fall ist, sollte bool false zurückgegeben werden. Diese function sucht nur nach dem Bool-False und kehrt basierend darauf zurück.