TinyMCE editörü güzel HTML'mi kırıyor


9

Bu hemen hemen tam bir kopyası: Wordpress ve TinyMCE'nin <a> etiketleri HTML5'te izin verildiği gibi blok düzeyindeki öğeleri sararak kabul etmesini nasıl sağlayabilirim? ve HTML5, WordPress ve Tiny MCE sorunu - çapa etiketini div'a sarmak funky çıktıyla sonuçlanıyor

Benim sorunum önerilen çözümün ( tiny_mce_before_initfiltre) sorunumu çözmediği. Şöyle görünüyor HTML var:

<a href="#">
    <img src="path/to/file.jpg" />
    <p>Some amazing descriptive text</p>
</a>

HTML5'te tamamen yasaldır. Ancak, WP editörü bunu sevmiyor ve şu şekilde dönüştürüyor:

<a href="#">
    <img src="path/to/file.jpg" />
</a>
<p>Some amazing descriptive text</p>

Bu tabii ki düzenimi bozuyor. Herkes bu davranışı önlemek için bir yol biliyor mu? Editörün Görsel bileşeninden vazgeçemiyorum ve düz metne yapışamıyorum. Herhangi bir öneri bekliyoruz.

Açıkça söylemek gerekirse, aşağıdaki kodu kullandığımda ( burada önerilen ), <p>etiketlerin çapaların içinde kalmasına izin verilir, ancak &nbsp;Görsel ve Metin modu arasında her geçiş yaptığınızda çoğalan bir varlık ile birlikte çok fazla ekstra alan eklenir .

add_filter('tiny_mce_before_init', 'modify_valid_children');

function modify_valid_children($settings){
    $settings['valid_children']="+a[div|p|ul|ol|li|h1|h2|h3|h4|h5|h5|h6]";
    return $settings;
}

Dominic yoksa bu eklentiyi deneyin ... Bazen burada veya orada güncellemelerde bir sorun var, ancak çoğunlukla html'yi nasıl beklediğinizi tamamen kullanmanızı sağlar. wordpress.org/plugins/preserved-html-editor-markup-plus
Bryan Willis

Yanıtlar:


17

Geçerli çocuk olarak yapılandırdığınız şey ne olursa olsun, WordPress p etiketlerini ve satır sonlarını çok benzersiz bir şekilde işler. Muhtemelen, daha önce yapmadıysanız, metin düzenleyiciden görsel düzenleyiciye geçerken ve geri döndüğünüzde, <p>etiketlerinizin ön uçta olanlara benzer şekilde soyulduğunu fark edeceksiniz . Bunun olmasını engellemenin bir yolu, <p>etiketlere özel bir sınıf vermektir .

<p class="text">This p tag won't get removed"</p>.

İken Bu elimden alma adresinin p etiketi tutacak, hala mucked alır önyüz üzerinde İşaretlemenize olarak sorunu çözmek olmayacaktır. Sen olabilir DISABLE wpautop. Bunu yaparsanız ve geçerli çocuklarda p varsa, bu SAYINIZI DÜZELTECEKTİR .

SEÇENEK 1: Autop'u Devre Dışı Bırak ve Geçerli Çocukları Ayarla

remove_filter( 'the_content', 'wpautop' );
add_filter('tiny_mce_before_init', 'modify_valid_children', 99);
function modify_valid_children($settings){     
    $settings['valid_children']="+a[div|p|ul|ol|li|h1|span|h2|h3|h4|h5|h5|h6]";
    return $settings;
}

HTML düzenleyiciden TinyMCE'ye geri döndüğünüzde HTML'nizin yok olacağı konusunda sizi uyarmalıyım . Geçici çözüm, aşağıdaki seçenek 2'deki gibi bazı yazı türleri için TinyMCE'yi tamamen devre dışı bırakmaktır .


SEÇENEK 2: Otomatik P, TinyMCE'yi Devre Dışı Bırak ve Geçerli Çocukları Ayarla

remove_filter( 'the_content', 'wpautop' );
add_filter('tiny_mce_before_init', 'modify_valid_children', 99);
function modify_valid_children($settings){     
    $settings['valid_children']="+a[div|p|ul|ol|li|h1|span|h2|h3|h4|h5|h5|h6]";
    return $settings;
}
add_filter('user_can_richedit', 'disable_wyswyg_to_preserve_my_markup');
function disable_wyswyg_to_preserve_my_markup( $default ){
  if( get_post_type() === 'post') return false;
  return $default;
}

Çoğu insan için bu bir seçenek değildir.


Peki başka hangi seçenekler var? İşe yaradığını fark ettiğim bir geçici çözüm , bir sınıfla yayılma etiketi kullanmak ve HTML etiketleriniz arasında boşluk olmadığından emin olmaktır . Bunu yaparsanız yukarıdaki seçeneklerden birini kullanabilir ve TinyMCE'yi hep birlikte devre dışı bırakmak zorunda kalmazsınız. Aralığı doğru görüntülemek için stil sayfanıza biraz CSS eklemeniz gerektiğini unutmayın.

SEÇENEK 3: Seçenek 1 + Stil Aralığı Etiketleri

HTML

<a href="#"><img src="https://placehold.it/300x200?text=Don%27t+P+On+Me" alt="" /><span class="noautop">Some amazing descriptive text</span></a>

Stil Sayfasında CSS

.noautop {
    display: block;
}

4. Seçenek: Yerleşik medya yükleyici kısa kodunu kullanma

kısa kod medya yükleyici

Başlangıçta bunu unuttum, ancak [altyazı] kısa kodu şöyle görünecektir:

[caption id="attachment_167" align="alignnone" width="169"]
    <img class="size-medium wp-image-167" src="http://example.com/example.png" alt="" width="169" height="300" />
    awesome caption
[/caption]

Çıktı şöyle görünecektir:

<figure id="attachment_167" style="width: 169px" class="wp-caption alignnone">
    <img class="size-medium wp-image-167" src="http://example.com/example.png" alt="" width="169" height="300" />
    <figcaption class="wp-caption-text">Some amazing descriptive text</figcaption>
</figure>

Şekil etiketleri istemiyorsanız , bunu yapmanızı sağlayan özel içerik kısa kodu gibi bir eklenti kullanabilirsiniz :

[raw] <p>this content will not get filtered by wordpress</p> [/raw]

Editör neden istediğim gibi çalışmıyor?

Son birkaç yıldır bunun işe yaramasını sağlamak için sayısız saat geçirdim. Bazen mükemmel çalışan bir çözüm bulacağım, ancak WordPress her şeyi tekrar karıştıran bir güncellemeyi itecek. Tamamen nasıl çalışması gerektiğini bulduğum tek çözüm beni sahip olduğum en iyi cevaba götürüyor.

Seçenek 5: Korunmuş HTML Editör İşaretleme Plus

Bu yüzden baş ağrısını kurtar ve sadece bununla git. Varsayılan olarak, Korunmuş HTML Düzenleyici İşaretleme Plus yalnızca yeni sayfaları etkiler. Önceden oluşturulmuş sayfaları değiştirmek istiyorsanız, www.example.com/wp-admin/options-writing.php adresine gitmeli ve eklenti ayarlarını düzenlemeniz gerekir. Ayrıca, varsayılan yeni satır davranışını da değiştirebilirsiniz.

Not: Bunu kullanmaya karar verirseniz, yeni bir WordPress güncellemesi başlatıldığında destek dizisini kontrol ettiğinizden emin olun. Bazen, bir değişiklik işleri karıştırır, bu nedenle eklentinin yeni sürümlerde çalıştığından emin olmak en iyisidir.


Ekstra Kredi: Sorununuzda Hata Ayıklama / Diğer TinyMCE Seçeneklerini Düzenleme

TinyMCE yapılandırmalarınızı filtrelerde yaptığınız gibi manuel olarak incelemek ve kolayca düzenlemek istiyorsanız, gelişmiş TinyMCE yapılandırmasını yükleyebilirsiniz . Bu görmenizi sağlar TÜM basit bir arayüzden yapılandırılan TinyMCE seçenekler ve düzenlemek onları arasında. Filtrelerde olduğu gibi yeni seçenekler de ekleyebilirsiniz. İşleri daha kolay anlaşılır hale getirir.

Örneğin, hem bu hem de Korunmuş HTML Editör Markup Plus var. Aşağıdaki ekran görüntüsü Advanced TinyMCE Config yönetici sayfasından alınmıştır. Ekran görüntüsü, gerçekten orada olanların% 90'ını keserken, geçerli olan çocukların düzenlenebilir olduğunu ve hangilerinin Korunmuş HTML Düzenleyici Markup Plus'ın eklendiğini görebilirsiniz.

TinyMCE editörü

Bu, yalnızca düzenleyicinizi tamamen özelleştirmenin değil, aynı zamanda neler olduğunu görmenin de son derece yararlı bir yoludur. O zaman soruna neyin sebep olduğunu bile anlayabilirsin. Korunmuş HTML Düzenleyici İşaretleme etkinken parametreleri kendim inceledikten sonra özel bir filtreye eklenebilecek bazı ek seçenekler gördüm.

function fix_tiny_mce_before_init( $in ) {

    // You can actually debug this without actually needing Advanced Tinymce Config enabled:
    // print_r( $in );
    // exit();

  $in['valid_children']="+a[div|p|ul|ol|li|h1|span|h2|h3|h4|h5|h5|h6]";
    $in[ 'force_p_newlines' ] = FALSE;
    $in[ 'remove_linebreaks' ] = FALSE;
    $in[ 'force_br_newlines' ] = FALSE;
    $in[ 'remove_trailing_nbsp' ] = FALSE;
    $in[ 'apply_source_formatting' ] = FALSE;
    $in[ 'convert_newlines_to_brs' ] = FALSE;
    $in[ 'verify_html' ] = FALSE;
    $in[ 'remove_redundant_brs' ] = FALSE;
    $in[ 'validate_children' ] = FALSE;
    $in[ 'forced_root_block' ]= FALSE;

    return $in;
}
add_filter( 'tiny_mce_before_init', 'fix_tiny_mce_before_init' );

Ne yazık ki bu yöntem işe yaramadı. Muhtemelen gönderi güncellenirken ve / veya editörler arasında geçiş yapılırken bazı regex veya JavaScript var. Korunmuş HTML Editör kaynak koduna bakarsanız, yönetici tarafında bazı JavaScript çalıştığını görebilirsiniz, bu nedenle son tavsiyem , temanıza bu işlevselliği eklemek istiyorsanız eklentinin nasıl çalıştığını kontrol etmek olacaktır .

Her neyse, cevabımda bu kadar ilerlemiş olanlar için üzgünüm. Sadece WordPress editörü ile ilgili kendi deneyimlerimi paylaşacağımı düşündüm, bu yüzden diğerleri umarım bunu anlamaya çalışarak saatler harcamak zorunda kalmazlar!


Örnek HTML'de bu yazım hatalarını yakaladığınız için teşekkürler (soruyu düzenledim). Açık olmak gerekirse, söz konusu gerçek HTML'de bu sorun yoktur. Bahsettiğiniz eklentiyi kontrol edeceğim.
Dominic P

Umarım bu Dominic'e yardım eder! Bahsetmek istediğim son bir şey, medya yükleyicisi aracılığıyla wordpress'te resim yazıları ekleyebilmeniz. Ayrıca, semantik olarak bunu yapmanın doğru yolunun böyle olduğuna inanıyorum. w3schools.com/tags/tag_figcaption.asp
Bryan Willis

Bu ilginç bir düşünce. Bunu bir figür ve resim yazısı olarak işaretlemeyi düşünmemiştim. Bunu deneyeceğim.
Dominic P

Sadece bunu kapatmak için. <span>Etiketler kullanarak yaralandım . İşaretlememin şimdi beyaz boşluğa bağımlı olmasından nefret ediyorum, ancak şimdilik en az direniş yoluydu. Denedim <figcaption>ama bir blok seviyesi elemanı ve TinyMCE <a>etiketlerin onu sarmasına izin vermedi , bu yüzden kare bir geri döndüm. Tüm fikirler için tekrar teşekkürler.
Dominic P

Dominic, Eğer kullanmak istiyorsanız yukarıdaki 4. seçeneğe bakın <figure>. Tamamen yerleşik altyazı kısa kod varsayılan olarak bunu unuttum!
Bryan Willis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.