Як завантажити 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();дадуть вам більше, ніж ви очікували: деякі плагіни (наприклад, Монітор запитів) реєструють свої сценарії навіть для запитів AJAX, навіть якщо вони їм там не потрібні.


Дуже дякую! ти врятував мене 2 дні, намагаючись влаштуватися на роботу! Єдине, що стосується цього, якщо ви хочете включити його до користувацького типу публікації, воно суперечить іншому редактору :(
numediaweb

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

0

Після боротьби з ним знайшли єдине рішення, яке працює, у зворотній виклик додайте:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.