TinyMCE संपादक मेरे सुंदर HTML को तोड़ रहा है


9

यह बहुत सटीक रूप से डुप्लिकेट है: Wordpress और TinyMCE को कैसे स्वीकार करें <HTML टैग्स को ब्लॉक स्तर के तत्वों को लपेटते हुए HTML5 में अनुमति दी गई है? और एचटीएमएल 5, वर्डप्रेस और टिनी एमसीई इश्यू - फंकी आउटपुट में डिव परिणाम के आसपास एंकर टैग लपेटने

मेरी समस्या यह है कि सुझाया गया समाधान ( tiny_mce_before_initफ़िल्टर) मेरी समस्या का समाधान नहीं करता है। मेरे पास HTML है जो इस तरह दिखता है:

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

HTML5 में पूरी तरह से कानूनी है। हालाँकि, WP संपादक इसे पसंद नहीं करता है और इसे इसमें रूपांतरित करता है:

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

यह, निश्चित रूप से, मेरे लेआउट को तोड़ता है। क्या कोई ऐसा तरीका जानता है जिससे मैं इस व्यवहार को रोक सकूं? मैं संपादक के दृश्य घटक को छोड़ नहीं सकता और सादे पाठ से चिपक सकता हूं । किसी भी सुझाव का स्वागत है।

बस स्पष्ट होने के लिए, जब मैं नीचे दिए गए कोड का उपयोग करता हूं ( यहां सुझाव दिया गया है ), <p>टैग को एंकर के अंदर रहने की अनुमति है, लेकिन एक अतिरिक्त &nbsp;इकाई के साथ बहुत सी अतिरिक्त जगह जोड़ी जाती है जो हर बार जब आप विज़ुअल और टेक्स्ट मोड के बीच स्विच करते हैं तो कई गुना बढ़ जाती है।

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;
}

यदि आप डोमिनिक नहीं है, तो इस प्लगइन का प्रयास करें ... यह कभी-कभार यहाँ या अपडेट पर एक समस्या है, लेकिन अधिकांश भाग के लिए यह html का उपयोग पूरी तरह से करता है कि आप किस तरह की अपेक्षा करेंगे। wordpress.org/plugins/preserved-html-editor-markup-plus
ब्रायन विलिस

जवाबों:


17

भले ही आपने वैध बच्चों के रूप में कॉन्फ़िगर किया हो, वर्डप्रेस पी टैग के साथ-साथ लाइन ब्रेक को भी बहुत ही अनोखे तरीके से हैंडल करता है। आप शायद पहले से ही नोटिस करेंगे, यदि आप पहले से ही नहीं है, कि जब पाठ संपादक से दृश्य संपादक और वापस स्विच कर रहा है कि आपके <p>टैग छीन लिए जाते हैं, तो सामने वाले पर क्या होता है। ऐसा होने से रोकने का एक तरीका यह है कि <p>टैग्स को एक कस्टम क्लास दिया जाए।

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

जबकि इस छीन होने से आपके पी टैग रखेंगे, यह दृश्यपटल अभी भी mucked हो जाता है पर अपने मार्कअप के रूप में आपकी समस्या का समाधान नहीं होगा। आप wpautop को निष्क्रिय कर सकते हैं । यदि आप ऐसा करते हैं और मान्य बच्चों में p शामिल है, तो यह आपका ISIXUE पूरा करेगा

विकल्प 1: ऑटोप को अक्षम करें और वैध बच्चों को सेट करें

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 संपादक से स्विच करके TinyMCE पर वापस जाएँ, तो आपका HTML नष्ट हो जाएगा। नीचे दिए गए विकल्प 2 में TinyMCE को कुछ पोस्ट प्रकारों के लिए पूरी तरह से अक्षम करने के लिए एक समाधान है ।


विकल्प 2: ऑटो P, TinyMCE और सेट वैलिड बच्चे अक्षम करें

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;
}

हालांकि ज्यादातर लोगों के लिए इस एक विकल्प नहीं है।


तो अन्य विकल्प क्या हैं? मेरे द्वारा देखा गया एक वर्कअराउंड एक वर्ग के साथ एक स्पैन टैग का उपयोग करना है और यह सुनिश्चित करना है कि आपके HTML टैग्स के बीच कोई सफेद स्थान नहीं है । यदि आप ऐसा करते हैं तो आप ऊपर दिए गए विकल्प का उपयोग कर सकते हैं और सभी एक साथ TinyMCE को निष्क्रिय करने से बच सकते हैं। बस याद रखें कि स्पैन को सही ढंग से प्रदर्शित करने के लिए आपको अपनी स्टाइलशीट में कुछ सीएसएस भी जोड़ना होगा।

विकल्प 3: विकल्प 1 + स्टाइल स्पैन टैग

एचटीएमएल

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

स्टाइलशीट में सीएसएस

.noautop {
    display: block;
}

विकल्प 4: बिल्ट इन मीडिया अपलोडर शोर्ट का उपयोग करें

शोर्ट मीडिया अपलोडर

मैं शुरू में यह भूल गया था, लेकिन [कैप्शन] शोर्ट इस तरह दिखेगा:

[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]

आउटपुट इस तरह दिखेगा:

<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>

यदि आप आंकड़ा टैग नहीं चाहते हैं तो आप कस्टम सामग्री शोर्ट जैसे प्लगइन का उपयोग कर सकते हैं जो आपको ऐसा करने की अनुमति देता है:

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

संपादक सिर्फ इसलिए काम नहीं कर सकता कि मैं कैसे चाहता हूं?

मैंने बीते कुछ सालों में अच्छा काम करने के लिए अनगिनत घंटे बिताए हैं। कभी-कभी मैं एक समाधान के साथ आता हूं जो पूरी तरह से काम करता है, लेकिन फिर वर्डप्रेस एक अपडेट को आगे बढ़ाएगा जो सब कुछ फिर से गड़बड़ कर देगा। एकमात्र समाधान जो मैंने कभी भी पूरी तरह से काम करने के लिए पाया है कि यह कैसे होना चाहिए, मुझे सबसे अच्छे उत्तर की ओर ले जाता है।

विकल्प 5: संरक्षित HTML संपादक मार्कअप प्लस

इसलिए सिरदर्द से खुद को बचाएं और बस इसी के साथ चलें। डिफ़ॉल्ट रूप से, संरक्षित HTML संपादक मार्कअप प्लस केवल नए पृष्ठों को प्रभावित करता है। यदि आप पहले से बनाए गए पृष्ठों को बदलना चाहते हैं, तो आपको www.example.com/wp-admin/options-writing.php पर जाना होगा और प्लगइन सेटिंग्स को संपादित करना होगा। आप डिफ़ॉल्ट न्यूलाइन व्यवहार को बदलने में भी सक्षम होंगे।

नोट: यदि आप इसका उपयोग करने का निर्णय लेते हैं, तो सुनिश्चित करें कि जब आप एक नया वर्डप्रेस अपडेट लॉन्च करते हैं, तो आप समर्थन थ्रेड की जांच करें। कभी-कभी, एक बदलाव चीजों को गड़बड़ कर देगा इसलिए यह सुनिश्चित करना सबसे अच्छा है कि प्लगइन नए संस्करणों पर काम करता है।


अतिरिक्त क्रेडिट: अपनी समस्या को डीबग करना / अन्य TinyMCE विकल्प संपादित करना

यदि आप अपने TinyMCE कॉन्फ़िगरेशन को मैन्युअल रूप से निरीक्षण और आसानी से संपादित करना चाहते हैं , जैसे आप फ़िल्टर के साथ करते हैं, तो आप उन्नत TinyMCE कॉन्फ़िगरेशन स्थापित कर सकते हैं । यह आपको सभी कॉन्फ़िगर किए गए TinyMCE विकल्पों को देखने और उन्हें एक सरल इंटरफ़ेस से संपादित करने देता है। आप फिल्टर की तरह ही नए विकल्प भी जोड़ सकते हैं। यह चीजों को समझने में बहुत आसान बनाता है।

उदाहरण के लिए, मेरे पास HTML संपादक मार्कअप प्लस दोनों हैं और संरक्षित हैं। नीचे स्क्रीनशॉट उन्नत TinyMCE कॉन्फिग एडमिन पेज का है। जबकि स्क्रीनशॉट वास्तव में वहाँ है का 90% काट रहा है, आप देख सकते हैं कि यह वैध बच्चों को संपादित करने के लिए उपलब्ध दिखाता है और किन लोगों ने संरक्षित HTML संपादक मार्कअप प्लस को जोड़ा है।

TinyMCE संपादक

यह न केवल आपके संपादक को पूरी तरह से अनुकूलित करने का एक बहुत ही उपयोगी तरीका है, बल्कि यह भी देखना है कि क्या चल रहा है। आप यह भी पता लगाने में सक्षम हो सकते हैं कि तब आपका मुद्दा क्या था। संरक्षित किए गए HTML संपादक मार्कअप सक्षम होने के दौरान मापदंडों को देखने के बाद मैंने कुछ अतिरिक्त विकल्प देखे, जिन्हें कस्टम फ़िल्टर में जोड़ा जा सकता है।

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' );

दुर्भाग्य से यह तरीका काम नहीं आया। शायद कुछ रेगेक्स या जावास्क्रिप्ट है जो पोस्ट को अपडेट करने और / या संपादकों के बीच स्विच करने के दौरान हो रहा है। यदि आप संरक्षित HTML संपादक स्रोत कोड पर एक नज़र डालते हैं, तो आप देख सकते हैं कि यह व्यवस्थापक पक्ष पर कुछ जावास्क्रिप्ट काम करता है, इसलिए मेरी आखिरी सलाह यह जांचना होगा कि प्लगइन कैसे काम करता है यदि आप अपने विषय में इस कार्यक्षमता को जोड़ना चाहते हैं।

वैसे भी, किसी को भी, जो मेरे जवाब में यह अब तक मिल गया है के लिए खेद है। बस सोचा था कि मैं अपने स्वयं के अनुभवों को वर्डप्रेस संपादक के साथ काम करूंगा, इसलिए दूसरों को उम्मीद है कि मुझे यह जानने की कोशिश करने में घंटों खर्च नहीं करना पड़ेगा!


मेरे उदाहरण HTML में उस टाइपो को पकड़ने के लिए धन्यवाद (मैंने प्रश्न संपादित किया)। बस स्पष्ट होने के लिए, प्रश्न में वास्तविक HTML में वह मुद्दा नहीं है। मैं आपके द्वारा बताए गए प्लगइन की जांच करूंगा।
डोमिनिक पी

उम्मीद है कि यह डोमिनिक मदद करता है! एक आखिरी बात जिसका मैं उल्लेख करना चाहूंगा कि आप मीडिया अपलोडर के माध्यम से वर्डप्रेस में कैप्शन जोड़ सकते हैं। इसके अलावा, मेरा मानना ​​है कि शब्दार्थ ऐसा करने का सही तरीका ऐसा है। w3schools.com/tags/tag_figcaption.asp
ब्रायन विलिस

यह एक दिलचस्प विचार है। मैंने इसे एक आंकड़ा और कैप्शन के रूप में चिह्नित नहीं किया था। मैं कोशिश करूँगा।
डोमिनिक पी

बस इसे बाहर बंद करने के लिए। मैं <span>टैग का उपयोग करके घायल हो गया । मुझे नफरत है कि मेरा मार्कअप अब श्वेत-स्थान पर निर्भर है, लेकिन यह अब के लिए कम से कम प्रतिरोध का मार्ग था। मैंने कोशिश की, <figcaption>लेकिन यह एक ब्लॉक स्तर का तत्व है, और टिनीएमसीई <a>टैग को इसे लपेटने की अनुमति नहीं देगा , इसलिए मैं स्क्वायर एक पर वापस आ गया था। सभी विचारों के लिए फिर से धन्यवाद।
डोमिनिक पी

यदि आप उपयोग करना चाहते हैं तो डोमिनिक, ऊपर का विकल्प 4 देखें <figure>। मैं पूरी तरह से भूल गया कि कैप्शन शोर्ट में निर्मित डिफ़ॉल्ट रूप से ऐसा करता है!
ब्रायन विलिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.