Ich habe ein Thema, das speziell entwickelt und sehr komplex ist. Ich habe unter anderem mehrere Inhaltsbereiche, in denen Benutzer Inhalte für bestimmte Registerkarten angeben können. Ich lade mehrere Instanzen des WordPress-Editors über die wp_editor()
Funktion. Es funktioniert perfekt (Dies ist alles auf der Admin-Seite, im Post-Typ "Seite")
Ich habe jedoch einige Verbesserungen vorgenommen, einschließlich der Möglichkeit, Tabs dynamisch hinzuzufügen / zu entfernen (zuvor habe ich 6 Editoren auf die Seite geladen). Benutzer können 1-7 Registerkarten haben.
Wenn Benutzer eine Registerkarte hinzufügen, muss der Seite eine Instanz des Editors hinzugefügt werden. Unabhängig davon, was ich versuche, kann ich es nicht laden und korrekt anzeigen.
Hier sind die 2 Dinge, die ich bisher ausprobiert habe:
- Erstellen Sie eine PHP-Datei, in der der Admin-Bootstrap enthalten ist, und laden Sie dann den Editor mit
wp_editor()
. Ich mache dann eine jQuery$.load
rufe die Seite mit auf und füge den resultierenden HTML-Code in den Bereich ein, der angezeigt werden soll. Dies funktioniert jedoch nicht wirklich, da die Formatierungsschaltflächen des Editors verschwinden (es ist erwähnenswert, dass beim direkten Aufrufen der Seite der Editor perfekt angezeigt wird und funktioniert). - Laden Sie den Editor auf der Seite in ein ausgeblendetes Div, und verschieben Sie ihn mit jquery, sobald ein Tab hinzugefügt wurde. Dadurch wird der Editor im Takt geladen, aber Sie können keine der Editorschaltflächen verwenden (sie werden angezeigt, tun aber nichts) und Sie können den Cursor nicht in den Textbereich setzen (neugierig, jedoch, wenn Sie in den HTML-Modus wechseln) Ermöglicht das Schreiben und einige Interaktionen mit den HTML-Modus-Schaltflächen
Die Frage ist also, hat jemand Glück gehabt, Redakteure über AJAX-Aufrufe hinzuzufügen? Irgendein Rat?
admin-ajax.php
? Wenn Sie mit Ihrem Code keine Funktion ausführen, rufen Sie ihn überadmin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
und habe dann eine Funktion hinzugefügt, die zurückgibtwp_editor()
. Es wird problemlos aufgerufen, gibt aber nur den Editor ohne Schaltflächen zurück. (Genau die gleichen Ergebnisse wie Punkt 1 im OP)Antworten:
Damit die QuickTags angezeigt werden, müssen Sie sie in Ihrem Ajax Oncomplete-Handler erneut instanziieren.
Mein Ajax Success Handler sieht so aus;
Ich habe es geschafft, den Editor zum Laden zu bringen, indem ich zuerst eine statische Funktion aufgerufen habe, die den Editor erstellt und als Variable zwischenspeichert. Ich führe die Editorerstellungsmethode auf init aus. Dies scheint WordPress dazu zu bringen, alle erforderlichen Skripte in die Enque zu bringen.
Es ist wichtig, dass Sie beim Erstellen Ihrer Editorinstanz Tinymce festlegen, damit auch die Tinymce-JS-Datei verwendet wird.
quelle
Nachdem Sie damit gekämpft haben, haben Sie in einem Rückruf nach dem Hinzufügen eines neuen Elements die Lösung gefunden, die funktioniert:
Es ist seltsam, dass es im Codex keine Dokumentation gibt.
quelle
wp_editor()
mittinymce
Arg- Satztrue
:-)Schließlich funktionierende Lösung:
füge eine Aktion in WordPress hinzu, sagen wir mal
My_Action_Name
(auch Notiz, Textfeld IDMy_TextAreaID_22
):Führen Sie nun im Dashboard die folgende Funktion aus (Anmerkung, Verwendung von
My_TextAreaID_22
undMy_Action_Name
):quelle
Sie müssen den Editor init erneut aufrufen, sobald Sie Ihr Ajax-Textarea hinzugefügt haben. Ich habe es folgendermaßen gemacht:
Rufen Sie dann Ihre Funktion nach Ihrer Ajax wie folgt auf:
quelle
response
), die Funktion tinymce_textareas auf, mit der tinyMCE für die neuen Textbereiche initialisiert wird.Die die brauchbare Lösung von @toscho auf Github . Dieses schöne Ergebnis baut er auch für eine Frage hier auf, siehe seine Antwort für weitere Details.
quelle
Verwenden Sie diesen Code, ich hoffe, es wird helfen:
Weitere Details finden Sie hier .
quelle
Ich habe es so geschafft:
ID muss rundom und einzigartig sein. Die Einstellungen müssen mit den Einstellungen in Ihrem Ajax-Editor übereinstimmen.
wp_editor( '', '[set id as you need]', array(the same settings as in the main page) ); _WP_Editors::editor_js(); //this print editor init code
quelle
Dies funktioniert auf Admin-Seiten.
So hängen Sie einen neuen WP-Editor an einen Container von JS AJAX an:
1) Erstellen Sie eine wp_ajax-Funktion in functions.php, um den wp_editor zurückzugeben
2) Erstellen Sie ein jQuery-Skript, um einen neuen Texteditor anzufordern, und hängen Sie ihn für diesen Fall per Knopfdruck an einen Container an
PHP-Datei
JS-Skript (jsfile.js)
Aufruf von Enqueue-Skripten:
quelle