Comment charger wp_editor via AJAX


17

Est-ce que quelqu'un sait comment charger wp_editor via AJAX dans WordPress?

Mon balisage et mon éditeur se chargent correctement, mais les contrôles de l'éditeur ne se chargent pas correctement, cela peut être dû au fait que Javascript ne s'exécute pas dans l'appel AJAX.

Toute aide serait appréciée.


C'est une sacrée chose de se mettre au travail. Découvrez une partie du code de Carrington Build ou Advanced Custom Fields (je pense ...). Soyez juste prêt à être frustré.
MikeNGarrett

Réponses:


7

Le principal problème réside dans les scripts manquants. Les scripts mis en file d'attente _WP_Editors::enqueue_scripts()ne sont jamais imprimés. Il en va de même pour _WP_Editors::editor_js().

Vous devez donc le faire dans votre gestionnaire de rappel AJAX. J'ai écrit un plugin de démonstration et l'ai mis sur GitHub: T5 AJAX Editor .

Il y a une classe nommée Ajax_Editor. Sa méthode render()imprime l'éditeur sur les requêtes AJAX.

public function render()
{
    if ( ! $this->validator->is_valid( TRUE ) )
        die( 'nope' );

    wp_editor( $this->data->get(), $this->editor_id, $this->settings );
    \_WP_Editors::enqueue_scripts();
    print_footer_scripts();
    \_WP_Editors::editor_js();

    die();
}

L'ordre exact est important, n'oubliez pas le die()à la fin. Ce qui ne fonctionne pas encore, c'est le téléchargement des médias. J'obtiens une erreur JavaScript lorsque j'essaie de l'inclure.

Notez que l'appel print_footer_scripts();vous donnera plus que ce à quoi vous vous attendiez: certains plugins (Query Monitor par exemple) enregistrent leurs scripts même pour les requêtes AJAX, même s'ils n'en ont pas besoin.


Merci beaucoup! tu m'as sauvé de 2 jours en essayant de trouver du travail! la seule chose avec cela, si vous voulez l'inclure dans un type de message personnalisé, il entre en conflit avec un autre éditeur :(
numediaweb

pour tous ceux qui recherchent, après WP 4.8, vous pouvez le faire plus facilement (et proprement) via l'API JS wp.editor.initialize: wordpress.stackexchange.com/a/274608/76440
majick

0

Après avoir lutté avec elle, a trouvé la solution à une ligne qui fonctionne, en rappel, ajoutez:

tinymce.execCommand( 'mceAddEditor', true, element.id );

Aucune idée pourquoi je n'ai pas pu trouver de documentation à l'intérieur de tinymce.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.