Переключение между HTML и визуальным редактором полностью удаляет содержимое страницы
У меня есть страница (не запись в блоге), на которую нужно встроить iframe (для "интеграции" каталога товаров внешнего сервиса). Я добавил код iframe в HTML-редакторе и сохранил страницу. Проверил - всё работало.
Когда я вернулся в редактор, переключился с HTML на визуальную вкладку, добавил строку текста, а потом вспомнил, что нужно добавить атрибут к коду iframe. Я переключился обратно на вкладку HTML.
После этого содержимое поста полностью исчезло. Всё, что я вводил в редакторе (в HTML или нет), было удалено, и пост стал пустым, как будто только что создан. Пришлось откатываться к предыдущей версии для восстановления.
Пока что решение - отключить визуальный редактор, но у меня есть нетехнический партнёр, и это не идеальное долгосрочное решение.
Есть ли способ контролировать это поведение WordPress? Я использую WordPress 3.1.1
Спасибо

В редакторе WordPress плохая обработка iFrame или сложного HTML при переключении между HTML и визуальным редактором (я сталкивался с этой проблемой много раз).
Лучший вариант — либо добавить шаблон страницы (page-{id}.php) с iFrame, либо использовать плагин, который добавляет шорткоды для iFrame, например:
http://wordpress.org/extend/plugins/easy-iframe-loader/
Это особенно полезно в среде, где контент редактируют люди без технических знаний.

Это был мой второй выбор — я не остановился на нём в основном потому, что не хотел использовать шорткоды.
Кто-нибудь ещё, кроме меня, хочет, чтобы TinyMCE/WordPress просто принимал введённый HTML и оставлял его как есть?

@red4d — Мой плагин делает именно то, что вы хотели бы от WordPress. Я, как и вы, хотел такого поведения и обнаружил, что это возможно с помощью кропотливой работы с ядром WP — http://wordpress.org/extend/plugins/preserved-html-editor-markup/

Я уже давно использую этот код в своем локальном плагине. Или вы можете просто добавить его в файл functions.php
вашей темы:
// Разрешить iframe в TinyMCE
function tinymce_add_iframe( $arr = array() ) {
$extra = 'iframe[id|class|title|style|align|frameborder|height|longdesc|marginheight|marginwidth|name|scrolling|src|width]';
if ( isset( $arr['extended_valid_elements'] ) ) {
// добавляем к существующему значению
$arr['extended_valid_elements'] .= ',' . $extra;
} else {
// устанавливаем значение
$arr['extended_valid_elements'] = $extra;
}
return $arr;
}
add_filter('tiny_mce_before_init','tinymce_add_iframe');
Этот код сообщает TinyMCE (визуальному редактору), что нужно разрешить тег iframe
и все его атрибуты.
