Jadi pertanyaan ini telah muncul berkali-kali di bawah bendera yang berbeda, namun saya ingin menyajikan utas terpadu untuk solusi terbaik untuk masalah ini.
Di WordPress, secara default, ketika berpindah-pindah antara HTML dan editor Visual di TinyMCE, tag tertentu dilucuti dari konten, dan fungsi aneh lainnya terjadi. Dua solusi yang diketahui untuk menulis kode HTML yang lebih efisien menggunakan menghapus fungsi wp_auto_p menggunakan filter, dan menginstal TinyMCE Advanced & mengaktifkan opsi "berhenti menghapus tag p & br".
Sayangnya, ini hanya bekerja dengan baik.
Ambil, misalnya, contoh berikut:
<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>
Jika saya mengetikkan kode ini ke editor HTML, dengan kedua opsi yang tercantum di atas sudah diaktifkan, maka ketika saya beralih di antara dua editor yang berbeda, tidak ada yang terjadi, yang diharapkan. Sayangnya, ketika menyimpan, kode secara otomatis dikonversi ke ini:
<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>
Seperti yang Anda lihat, semua entitas di dalam tag pra dikonversi kembali ke karakter HTML yang sebenarnya. Lalu, jika saya menyimpan posting yang sama ini lagi, saya mendapatkan sesuatu seperti berikut:
<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>
Perhatikan bahwa Wordpress akan benar-benar menyuntikkan br tag ke dalam postingan. Tak perlu dikatakan, ketika posting ini telah diperbarui beberapa kali, ketika melihatnya di frontend, layar tidak berada di dekat tampilan yang dimaksud.
Satu-satunya cara saya sepertinya menyingkirkan semua "fungsi pemformatan" yang ditambahkan adalah dengan menonaktifkan editor Visual melalui profil saya.
Ini adalah solusi yang baik bagi saya, mengingat saya seorang pengembang web profesional. Untuk klien saya, solusi ini jauh dari anggun. Klien saya sebagian besar akan menggunakan editor visual. Banyak klien saya yang tidak terlalu mengerti teknologi, dan kadang-kadang membutuhkan saya untuk memperbaiki posting mereka ketika tata letak rusak. Ini membatasi saya untuk menggunakan editor visual, karena saya tidak dapat mengubah ke editor HTML tanpa takut melanggar tata letak.
Terutama, (dan saya pikir ada komunitas besar yang dapat mengambil manfaat dari jawaban ini), langkah eksplisit apa yang dapat saya ikuti untuk memastikan hal berikut:
- Posting dapat diedit dari editor Visual atau HTML.
- Konten posting tidak dimodifikasi dengan cara apa pun saat beralih di antara kedua tab.
- Saat menyimpan posting dari editor HTML, tidak ada konten tambahan yang ditambahkan.
- Saat menyimpan posting dari editor HTML, tidak ada entitas yang dikonversi.
- BONUS: Saat menyimpan posting dari editor HTML, kode apa pun (HTML misalnya) yang dibungkus dengan tag pra dan belum dikonversi ke entitas akan secara otomatis dikonversi ke entitas.
Pada dasarnya, jika kita dapat membuat perilaku yang disebutkan di TinyMCE melalui penggunaan plugin pihak ketiga, kita dapat memadamkan semua pertanyaan lain tentang pemformatan yang salah melalui penggunaan TinyMCE. Saya merasa bahwa banyak orang dapat mengambil manfaat dari ini.
Tampaknya logis bahwa ada fungsi tertentu yang diharapkan dari editor WYSIWIG, dan ini bertentangan dengannya. Menurut semua logika dan alasan, fungsi pemformatan bawaan Wordpress sangat tidak berguna dengan pengaturannya saat ini. Menurut saya, jika mereka ingin menggunakan opsi pemformatan ini, taruhan terbaik mereka adalah mengaktifkan satu editor atau yang lain, bukan keduanya.
DAN TOLONG: Jangan jawab utas ini dengan pemecahan masalah dan unduhan untuk editor WYSIWIG lain yang 'memperbaiki' masalah. Ini adalah masalah mendasar (walaupun bukan bug) dengan inti Wordpress yang perlu diperbaiki.
EDIT : Baiklah, saya sudah mengerjakan ini dan saya berpikir reverse engineering akan menjadi cara terbaik untuk menyelesaikan masalah ini. Jadi untuk saat ini, saya telah menonaktifkan wpautop (yang hanya untuk kejelasan adalah fungsi yang menghubungkan ke filter "the_content" untuk menambahkan tag p dan br sebelum teks ditampilkan , bukan ketika teks disimpan. Saya pikir ada beberapa kebingungan tentang bagaimana fungsi ini beroperasi. wpautop tidak bertanggung jawab atas perubahan yang Anda lihat terjadi ketika Anda beralih di antara tab editor. Itu sesuatu yang sama sekali berbeda.
Bagaimanapun, saya telah menonaktifkan wpautop, seperti praktik yang baik ketika Anda menggunakan editor HTML. Sejak saat itu, saya menonaktifkan editor visual untuk memulai pertama dengan kesalahan html entitas yang ada saat menyimpan posting. Berkat bantuan satu C. Bavota, saya menemukan cuplikan untuk mengonversi tag apa pun di editor HTML ke entitas yang setara sebelum menampilkannya di ujung depan situs (kredit: http://bavotasan.com/2012/convert -pre-tag-content-to-html-entitas-di-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 );
Ini secara efektif menghilangkan masalah dengan Wordpress mengubah semua entitas menjadi tag setelah menyimpan dengan mengelak dari itu. Sekarang, Anda dapat menggunakan editor HTML, dan menulis kode standar di antara tag "pra" tanpa melakukan konversi entitas sendiri. Ini menangani semua masalah dengan konversi entitas di Wordpress, dan memastikan semuanya ditampilkan dengan benar di ujung depan. Sekarang, kita perlu mencari tahu apa yang harus dihubungkan untuk mengubah perilaku yang dialami saat mengklik bolak-balik di antara tab. Saat ini, akan terlihat bahwa ketika berpindah dari HTML ke tab visual, isi dari tab HTML diinterpretasikan oleh javascript atau sesuatu untuk mencoba memberikan pembaruan langsung seperti apa konten itu seharusnya. Ini menyebabkan tag (yang ditampilkan dalam bentuk non entitas di tab HTML) diproses dan bukannya ditampilkan. Kemudian, ketika beralih kembali ke tab HTML, akan muncul bahwa TinyMCE meneruskan data saat ini. Ini berarti ketika Anda beralih kembali, Anda kehilangan struktur HTML Anda. Kita perlu mencari cara untuk memberitahu TinyMCE untuk mengonversi semua yang ada di tag pra ke entitas yang setara sebelum memuatnya ke jendela (pada dasarnya versi backend dari apa yang kita lakukan di frontend tetapi dengan tinymce dan javascript, bukan php dan kait), sehingga itu ditampilkan alih-alih diproses. Saran? entitas yang setara sebelum memuatnya ke jendela (pada dasarnya versi backend dari apa yang kami lakukan di frontend tetapi dengan tinymce dan javascript alih-alih php dan kait), sehingga ditampilkan bukan diproses. Saran? entitas yang setara sebelum memuatnya ke jendela (pada dasarnya versi backend dari apa yang kami lakukan di frontend tetapi dengan tinymce dan javascript alih-alih php dan kait), sehingga ditampilkan bukan diproses. Saran?
EDIT 2 :
Setelah beberapa penelitian lebih lanjut, mengubah entitas di tag pra ketika mereka ditampilkan berfungsi dengan baik untuk konten dalam tag pra, tetapi katakan saya memiliki posting blog dengan garis seperti ini:
"Selanjutnya, kita perlu menambahkan baris ini ke file HTML kita: <p> Halo, Dunia! </p>"
Melihat baris ini, Anda dapat mengetahui bahwa kode tersebut seharusnya ditampilkan di situs, dan tidak diuraikan, namun ketika pos disimpan, entitas ini diterjemahkan pada beban pengeditan posting berikutnya, dan pada setiap penyimpanan berikutnya mereka disimpan sebagai tag html mentah, yang menyebabkan mereka diuraikan di ujung depan. Satu-satunya solusi yang dapat saya pikirkan sejauh ini adalah menulis dalam kode yang sama untuk tag "kode" seperti yang saya gunakan untuk pra, dan kemudian hanya membungkus satu liner kecil di tag "kode", dan potongan besar di tag "pre". Adakah yang punya ide lain?