Там может быть взлом участие, однако, я пытался свести их к минимуму.
Чтобы wp_editor может работать в динамическом HTML (что означает без перезагрузки страницы, JS изменяет структуру страницы), существуют две основные проблемы, необходимо позаботиться:
- TinyMCE
- qucik-теги
Для [TinyMCE]:
а. нужно сбросить пользовательский интерфейс правильно
решение [удалить экземпляр MCE] -> [получить правильные параметры MCE] -> [повторно инициализировать новый экземпляр MCE]
в JS код (идентификатор означает текстовой идентификатор):
tinymce.execCommand('mceRemoveEditor', true, id);
var init = tinymce.extend({}, tinyMCEPreInit.mceInit[ id ]);
try { tinymce.init(init); } catch(e){}
б. нужны записи данных обратно в текстовое поле, прежде чем отправить
- решение [привязывать нажмите на кнопку] -> по submt :: [выключить MCE] -> [включить отправить]
в JS код:
jq('textarea[id="' + id + '"]').closest('form').find('input[type="submit"]').click(function(){
if(getUserSetting('editor') == 'tmce'){
var id = mce.find('textarea').attr('id');
tinymce.execCommand('mceRemoveEditor', false, id);
tinymce.execCommand('mceAddEditor', false, id);
}
return true;
});
Для [Quick] теги:
а. Re-INIT теги
- [Получить настройки] -> [Настройка событий мыши] -> [повторно инициализации QTags]
б. Перейдите на соответствующую вкладку (вкладка MCE или быстрой вкладки тегов)
[переключатель для текущего режима вкладок]
как выше в JS код:
if (typeof(QTags) == 'function') {
jq('[id="wp-' + id + '-wrap"]').unbind('onmousedown');
jq('[id="wp-' + id + '-wrap"]').bind('onmousedown', function(){
wpActiveEditor = id;
});
QTags(tinyMCEPreInit.qtInit[ id ]);
QTags._buttonsInit();
switchEditors.switchto(jq('textarea[id="' + id + '"]').closest('.widget-mce').find('.wp-switch-editor.switch-' + (getUserSetting('editor') == 'html' ? 'html' : 'tmce'))[0]);
}
Кроме того, пожалуйста, помните, если вы используете ajax, каждый раз после возврата mce UI, вам нужно повторно выполнить [сброс mce UI] и [Qtags] в js. легкий раствор с помощью JS код в проводке обратно HTML, и обнаружить в PHP из:
$isAjax = defined('DOING_AJAX') && DOING_AJAX == true);
О настройках по умолчанию в Js значение:
MCE: tinyMCEPreInit.mceInit
qtags: tinyMCEPreInit.qtInit
Если вы попытаетесь использовать настройку по умолчанию для режима виджетов, вам нужно найти настройки по умолчанию.
Чтобы получить виджет шаблона, в JS код:
function getTemplateWidgetId(id){
var form = jQuery('textarea[id="' + id + '"]').closest('form');
var id_base = form.find('input[name="id_base"]').val();
var widget_id = form.find('input[name="widget-id"]').val();
return id.replace(widget_id, id_base + '-__i__');
}
Таким образом, вы можете получить настройки с помощью:
для MCE:
var init;
if(typeof tinyMCEPreInit.mceInit[ id ] == 'undefined'){
init = tinyMCEPreInit.mceInit[ id ] = tinymce.extend({}, tinyMCEPreInit.mceInit[ getTemplateWidgetId(id) ]);
}else{
init = tinyMCEPreInit.mceInit[ id ];
}
Для Qtags:
var qInit;
if(typeof tinyMCEPreInit.qtInit[ id ] == 'undefined'){
qInit = tinyMCEPreInit.qtInit[ id ] = jq.extend({}, tinyMCEPreInit.qtInit[ getTemplateWidgetId(id) ]);
qInit['id'] = id;
}else{
qInit = tinyMCEPreInit.qtInit[ id ];
}
Для полного образца кода, пожалуйста, проверьте: https://github.com/hezachary/wordpress-wysiwyg-widget/blob/master/widget_wp_editor.class.php
Если кто-то хочет использовать wp_editor в меню ходьбы для администратора, принцип должен быть таким же.
Если у вас есть вопросы или лучше, пожалуйста, прокомментируйте, спасибо.
задаваемые здесь: ** http://wordpress.stackexchange.com/a/192132/33667** –