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


17

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

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

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


Это чертовски важно работать. Проверьте часть кода из Carrington Build или Advanced Custom Fields (я думаю ...). Просто будьте готовы разочароваться.
MikeNGarrett

Ответы:


7

Основной проблемой являются отсутствующие скрипты. Сценарии, поставленные в очередь _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, даже если они там не нужны.


Спасибо! Вы спасли меня от 2 дней, пытаясь получить работу! единственное с этим, если вы хотите включить его в пользовательский тип сообщения, это конфликтует с другим редактором :(
numediaweb

для тех, кто ищет, после WP 4.8 вы можете сделать это более легко (и аккуратно) через JS API wp.editor.initialize: wordpress.stackexchange.com/a/274608/76440
majick

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.