J'ai un thème développé sur mesure et vraiment complexe. L'une des choses que j'ai, c'est plusieurs zones de contenu où les utilisateurs peuvent spécifier du contenu pour des onglets spécifiques. Je charge plusieurs instances de l'éditeur WordPress via la wp_editor()
fonction. Cela fonctionne parfaitement. (Tout cela est du côté administrateur, dans le type de message "Page")
Cependant, j'ai commencé à apporter quelques améliorations, notamment la possibilité d'ajouter / supprimer des onglets de manière dynamique (auparavant, j'avais chargé 6 éditeurs sur la page). Les utilisateurs peuvent avoir 1 à 7 onglets.
Lorsque les utilisateurs ajoutent un onglet, il doit ajouter une instance de l'éditeur à la page. Cependant, peu importe ce que j'essaie, je n'arrive pas à le charger et à l'afficher correctement.
Voici les 2 choses que j'ai essayées jusqu'à présent:
- Créez un fichier php avec le bootstrap d'administration inclus, puis chargez l'éditeur avec
wp_editor()
. Je fais ensuite un jQuery$.load
pour appeler la page et inclure le code HTML résultant dans la zone qu'il doit afficher. Cela ne fonctionne pas vraiment, cependant, car les boutons de formatage des éditeurs disparaissent (il convient de noter que, en tirant la page directement, l'éditeur s'affiche et fonctionne parfaitement) - A chargé l'éditeur sur la page, à l'intérieur d'un div caché, puis une fois un onglet ajouté, utilisez jquery pour le déplacer en place. Cela charge l'éditeur dans le tact, mais vous ne pouvez utiliser aucun des boutons de l'éditeur (ils s'affichent, mais ne font rien), et vous ne pouvez pas placer votre curseur dans la zone de texte (curieux, cependant, que le passage en mode HTML permet de taper et d'interagir avec les boutons du mode HTML)
La question est donc: est-ce que quelqu'un a eu de la chance d'ajouter des éditeurs via les appels AJAX? Aucun conseil?
admin-ajax.php
? Si vous ne faites pas de fonction avec votre code, appelez-le viaadmin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
puis ajouté une fonction qui retournewp_editor()
. Il est appelé sans problème, mais il ne renvoie que l'éditeur sans boutons. (mêmes résultats que l'article 1 du PO)Réponses:
Pour faire apparaître les quicktags, vous devez les réinstancier dans votre gestionnaire ajax oncomplete.
Mon gestionnaire de réussite ajax ressemble à ceci;
J'ai réussi à charger l'éditeur à charger en appelant d'abord une fonction statique qui crée l'éditeur et le met en cache en tant que variable. J'exécute la méthode de création d'éditeur sur init. Cela semble permettre à wordpress d'exécuter tous les scripts requis.
Il est important que lorsque vous créez votre instance d'éditeur, que vous la configuriez pour utiliser tinymce, le fichier js tinymce est également interrogé.
la source
Après avoir rencontré des difficultés, trouvé la solution qui fonctionne, dans un rappel après avoir ajouté un nouvel élément:
C'est étrange qu'il n'y ait aucune documentation à l'intérieur du codex.
la source
wp_editor()
avectinymce
arg défini surtrue
:-)Enfin, solution de travail:
ajouter une action dans wordpress, disons
My_Action_Name
(notez également, ID de zone de texteMy_TextAreaID_22
):maintenant, dans Dashboard, exécutez cette fonction (remarque, utilisation de
My_TextAreaID_22
etMy_Action_Name
):la source
Vous devez appeler à nouveau l'éditeur init une fois que vous avez ajouté votre zone de texte ajax, je l'ai fait comme ceci:
Appelez ensuite votre fonction après votre ajax, comme ceci:
la source
response
), appelez la fonction tinymce_textareas qui initialise tinyMCE sur les nouvelles zones de texte.La solution utilisable de @toscho sur github . Il a construit ce joli résultat aussi pour une question ici, voir sa réponse pour plus de détails.
la source
Utilisez ce code, j'espère qu'il vous aidera:
Plus de détails peuvent être trouvés ici .
la source
Je l'ai géré de cette façon:
L'ID doit être unique et unique. Les paramètres doivent être les mêmes que ceux de votre éditeur ajax.
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
la source
Cela fonctionnera sur les pages d'administration.
Pour ajouter un nouvel éditeur wp à un conteneur par JS AJAX:
1) Créez une fonction wp_ajax dans functions.php pour retourner le wp_editor
2) Créez un script jQuery pour demander un nouvel éditeur de texte et ajoutez-le à un conteneur, dans ce cas, lorsque vous appuyez sur un bouton
Fichier PHP
Script JS (jsfile.js)
Les scripts de mise en file d'attente appellent:
la source