Функция автосохранения массива настроек редактора wp onchange

Я пытаюсь настроить автосохранение для динамических редакторов wp на случай, если мои пользователи забудут нажать «Сохранить». (В настоящее время для сохранения используется кнопка AJAX.) Пользователи могут иметь от 0 до 20 отдельных записей.

Кажется, что-то нужно добавить в массив настроек wp_editor, чтобы он добавлялся при инициализации tinymce. Массив настроек работает. Я могу добавить или удалить медиа-кнопки. Однако я не могу вставить правильный код в настройки, чтобы заставить его что-то запускать при изменении активного редактора.

Вот что у меня есть.

$editorSettings = 
array ( 'media_buttons' => false,
        'resize' => false,
        'wp_autoresize_on' => true,
        'setup' => "function(ed) {
                      ed.onChange.add(function(ed, l) {
                        console.debug('Editor contents was modified. Contents: ' + l.content);
                      });
                    });" 
  );

Строительный редактор с этим кодом.

<?php wp_editor( stripslashes($j->journal_entry), 'journal-edit-'.$i , $editorSettings  ); ?>

В идеале я бы просто запустил код сохранения AJAX, который я уже написал. Однако событие изменения, похоже, не срабатывает.

Это лучший способ сделать это или я должен создать что-то вне функций wp_editor. Я могу найти много кода, чтобы вручную запустить tinymce и изменить его, но не при попытке пройти через Wordpress.

Я думал о настройке скрытых полей для сравнения, но это кажется плохим способом. Должна быть какая-то встроенная функциональность, которую можно использовать вместо того, чтобы создавать ее с нуля.

Спасибо за вашу помощь и предложения!


person user1518699    schedule 17.11.2016    source источник


Ответы (1)


Так что похоже, что вы не хотите делать это через массив настроек. Вместо этого добавьте фильтр для вставки этого кода pre_init. Следующий код «нажимает» кнопку «Сохранить» и выводит на консоль событие изменения из tinymce в WordPress.

Строка setup js должна быть минимизирована, иначе она выдаст ошибки в консоли.

Добавьте что-то подобное в файл functions.php. ПРИМЕЧАНИЕ. ' необходимо экранировать в некоторых частях этого кода, чтобы он не приводил к ошибкам в файле функций.

function mce_autosave_mod( $init ) {
    $init['setup'] = 'function(a){a.on("change",function(b){jQuery(this).parent().find(\'#btnEditCharJournal\').trigger("click"),console.log("the event object ",b),console.log("the editor object ",a),console.log("the content ",a.getContent())})}';     
    return $init;
}
add_filter('tiny_mce_before_init', 'mce_autosave_mod');

Сюда можно добавить любой другой код. Рекомендуется также добавить логику, чтобы ограничить это конкретным редактором на вашем сайте. Вы не хотите, чтобы это работало для всех экземпляров редактора.

Если у вас есть какие-либо предложения, чтобы очистить это или сделать это лучше, пожалуйста, дайте мне знать. Я новичок в фильтрах и wp_editor/tinymce.

person user1518699    schedule 17.11.2016