Тож це питання піднімалося багато разів під різними прапорами, проте я хотів би представити єдину нитку для остаточного вирішення цього питання.
У WordPress за замовчуванням під час перемикання між і назад редакторами HTML і Visual у TinyMCE певні теги позбавляються вмісту, а також виникає інша дивна функціональність. Два відомих обхідних шляхи для написання більш ефективного HTML-коду - це видалити функцію wp_auto_p за допомогою фільтрів, а також встановити TinyMCE Advanced та включити опцію "зупинити видалення p & br тегів".
На жаль, це працює настільки добре, на жаль.
Візьмемо, наприклад, такий приклад:
<h2>How does it work?</h2>
<p>In order to use jQuery Easy Columns, you must install it as you would any other jQuery plugin. First, download the zip file using the button above. After downloading the file, extract it to a location of your choice, and move the extracted folder to your server using your favorite FTP client. After moving the plugin to your server (and of course calling the jQuery source into your document), call it in on your site using the following snippet of code:</p>
<pre>
<script type="text/javascript" src="/path/to/jquery.easycolumns.js"></script>
</pre>
Якщо я введу цей код у редакторі HTML, і обидва перераховані вище параметри вже включені, тоді, коли я переключаюсь між двома різними редакторами, нічого не станеться, чого очікувати. На жаль, при збереженні код автоматично перетворюється на це:
<h2>How does it work?</h2>
<p>In order to use jQuery Easy Columns, you must install it as you would any other jQuery plugin. First, download the zip file using the button above. After downloading the file, extract it to a location of your choice, and move the extracted folder to your server using your favorite FTP client. After moving the plugin to your server (and of course calling the jQuery source into your document), call it in on your site using the following snippet of code:</p>
<pre>
<script type="text/javascript" src="/path/to/jquery.easycolumns.js"></script>
</pre>
Як бачимо, всі об'єкти всередині попереднього тегу перетворюються назад у фактичні символи HTML. Потім, якщо я знову збережу цю саму публікацію, я отримаю щось на зразок наступного:
<h2>How does it work?</h2>
<p>In order to use jQuery Easy Columns, you must install it as you would any other jQuery plugin. First, download the zip file using the button above. After downloading the file, extract it to a location of your choice, and move the extracted folder to your server using your favorite FTP client. After moving the plugin to your server (and of course calling the jQuery source into your document), call it in on your site using the following snippet of code:</p>
<pre><br />
<script type="text/javascript" src="/path/to/jquery.easycolumns.js"></script><br />
</pre>
Зауважте, що Wordpress насправді вставить br теги в пост. Потрібно сказати, що коли ця публікація оновлювалася кілька разів, під час перегляду її на фронтальному вікні, дисплей ніде не знаходиться поруч із призначеним екраном.
Єдиний спосіб, який я, здавалося, позбувся від усієї доданої "функціональності форматування", - це відключити редактор Visual через мій профіль.
Це прекрасне рішення для мене, враховуючи, що я є професійним веб-розробником. Для моїх клієнтів це рішення далеко не елегантне. Мої клієнти здебільшого будуть використовувати візуальний редактор. Багато моїх клієнтів не дуже підковані в техніці, і мені іноді потрібно виправити їх повідомлення, коли зламається макет. Це обмежує використання візуального редактора, оскільки я не можу перейти на редактор HTML, не боячись зламати макет.
В основному, (і я думаю, що існує велика спільнота, яка могла б отримати користь від цієї відповіді), які явні кроки я можу дотримуватися, щоб забезпечити наступне:
- Допис можна редагувати з редактора Visual або HTML.
- Вміст публікації жодним чином не змінюється при перемиканні між двома вкладками.
- Під час збереження публікації з редактора HTML не додається додатковий вміст.
- Під час збереження публікації з редактора HTML жодна суть не конвертується.
- БОНУС: Під час збереження публікації з редактора HTML будь-який код (наприклад, HTML), який загорнутий у попередній тег та ще не перетворений на об'єкти, буде автоматично перетворений на об'єкти.
По суті, якщо ми можемо створити вищезгадану поведінку в TinyMCE за допомогою стороннього плагіна, ми можемо вгамувати всі інші питання щодо помилкового форматування за допомогою використання TinyMCE. Я відчуваю, що багато людей могли б отримати від цього користь.
Просто здається логічним, що існує певна функціональність, яку можна було б очікувати від редактора WYSIWIG, і це суперечить цьому. Згідно з усією логікою та причинами, вбудовані у формат формат Wordpress функції даремно при їх нинішньому налаштуванні. Мені здається, що якщо вони хочуть використовувати ці параметри форматування, їх найкращим варіантом буде включення одного редактора чи іншого, а не обох.
І ЗАБУДУЙМО: Не відповідайте на цю тему шляхом обходу та завантаження для інших редакторів WYSIWIG, які "вирішили" проблему. Це основна проблема (хоча не справді помилка) з ядром Wordpress, яку потрібно виправити.
EDIT : Добре, я працював над цим, і я думаю, що зворотна інженерія буде найкращим способом вирішити це питання. Тож наразі я відключив wpautop (що лише для наочності - це функція, яка зачепить у фільтр "the_content", щоб додати теги p та br до того, як текст буде показаний , а не тоді, коли текст буде збережено. Я думаю, що існує деяка плутанина щодо функціонування цієї функції. wpautop не несе відповідальності за зміни, що відбуваються при переключенні між вкладками редактора. Це щось зовсім інше.
У будь-якому випадку я відключив wpautop, як це добре застосовується при використанні редактора HTML. З цього моменту я відключив візуальний редактор для початку спочатку з помилками html-сутності, які є при збереженні публікації. Завдяки допомозі одного з C. Bavota, я знайшов фрагмент для перетворення будь-яких тегів у редакторі HTML у їх еквівалентні об'єкти, перш ніж відображати їх на передньому кінці сайту (кредит: http://bavotasan.com/2012/convert -pre-tag-content-to-html-elements-in-wordpress / ).
#add_filter( 'the_content', 'pre_content_filter', 0 );
/**
* Converts pre tag contents to HTML entities
*
* This function is attached to the 'the_content' filter hook.
*
* @author c.bavota
*/
function pre_content_filter( $content ) {
return preg_replace_callback( '|<pre.*>(.*)</pre|isU' , 'convert_pre_entities', $content );
}
function convert_pre_entities( $matches ) {
return str_replace( $matches[1], htmlentities($matches[1] ), $matches[0] );
}
add_filter( 'the_content', 'pre_content_filter', 10, 2 );
Це ефективно усуває проблеми з Wordpress, перетворюючи всі об'єкти в теги при збереженні шляхом їх обходу. Тепер ви можете використовувати редактор HTML і писати стандартний код між тегами "pre", не здійснюючи перетворення сутності самостійно. Це допомагає вирішити всі проблеми з перетворенням сутності в Wordpress і гарантує, що все відображається правильно на передній частині. Тепер нам потрібно розібратися в тому, що потрібно підключити, щоб змінити поведінку при натисканні назад і назад між вкладками. Зараз здається, що при переході від HTML до візуальної вкладки вміст вкладки HTML інтерпретується javascript або щось, щоб спробувати забезпечити актуальне оновлення того, як повинен виглядати контент. Це призводить до того, що теги (які відображаються у формі без сутності на вкладці HTML) обробляються замість відображення. Потім, при переході назад на вкладку HTML, виявиться, що TinyMCE передає поточні дані. Це означає, що при переключенні назад ви втрачаєте свою HTML-структуру. Нам потрібно знайти спосіб сказати TinyMCE конвертувати все в попередні теги в його еквівалентні об'єкти, перш ніж завантажувати його у вікно (по суті, це бекенд-версія того, що ми робили на фронталі, але з tinymce та javascript замість php та гаків), щоб він відображався замість обробки. Пропозиції? s еквівалентні об'єкти, перш ніж завантажувати його у вікно (по суті, бекенд-версія того, що ми робили на фронті, але з tinymce та javascript замість php та гаків), щоб воно відображалось замість обробки. Пропозиції? s еквівалентні об'єкти, перш ніж завантажувати його у вікно (по суті, бекенд-версія того, що ми робили на фронті, але з tinymce та javascript замість php та гаків), щоб воно відображалось замість обробки. Пропозиції?
EDIT 2 :
Після ще кількох досліджень перетворення об'єктів у попередній тег, коли вони відображаються, добре працює на вміст у попередньому тезі, але скажіть, що у мене є повідомлення в блозі з таким рядком:
"Далі нам потрібно додати цей рядок до нашого HTML-файлу: <p> Привіт, світ! </p>"
Переглядаючи цей рядок, ви можете сказати, що код повинен відображатися на сайті, а не розбиратися, однак, коли публікація збережена, ці об’єкти декодуються при наступному завантаженні редагування публікації, і при кожному наступному збереженні вони зберігаються як сирі HTML-теги, через що вони розбираються на передньому кінці. Єдиним рішенням, про яке я зараз думаю, було б написати аналогічний код для тегу "code", який я використовую попередньо, а потім просто загорнути невеликі вкладиші в тег "code", а великі шматки в тег "до" У когось є якісь інші ідеї?