it-roy-ru.com

Как загрузить wp_editor через AJAX

Кто-нибудь знает, как загрузить wp_editor через AJAX в WordPress?

Моя разметка и редактор загружаются правильно, но элементы управления редактора загружаются неправильно, возможно, это связано с тем, что Javascript не работает при вызове AJAX.

Любая помощь будет оценена.

17
user17108

Основной проблемой являются отсутствующие скрипты. Сценарии, поставленные в очередь в _WP_Editors::enqueue_scripts(), никогда не печатаются. То же самое верно для _WP_Editors::editor_js().

Так что вы должны сделать это в своем обработчике обратного вызова AJAX. Я написал демонстрационный плагин и поместил его на GitHub: T5 AJAX Editor .

Существует один класс с именем Ajax_Editor. Его метод render() печатает редактор по запросам 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();
}

Точный порядок важен, не забудьте die() в конце. Что еще не работает, так это загрузка медиа. Я получаю ошибку JavaScript, когда пытаюсь включить это.

Обратите внимание, что вызов print_footer_scripts(); даст вам больше, чем вы ожидали: некоторые плагины (например, Query Monitor) регистрируют свои сценарии даже для AJAX запросов, даже если они там им не нужны.

6
fuxia

После борьбы с ним, нашел решение, которое работает в одну строку, в callback добавить:

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

Не знаю, почему я не смог найти документацию внутри tinymce.

0
Goran Jakovljevic