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.

user17108
la source
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.

fuxia
la source
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.

Goran Jakovljevic
la source