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

17

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

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

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

user17108
источник
Это чертовски важно работать. Проверьте часть кода из 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.

Горан Яковлевич
источник