मैं वर्डप्रेस (HTML5, या HTML4 उदाहरण के लिए) में मार्कअप के लिए स्व-समापन टैग कैसे बंद करूं?


18

मैं अपने वर्डप्रेस थीम में एचटीएमएल 5 का उपयोग करना चाहता हूं, मैं wptexturize कैसे बंद करूं?

मुझे नहीं लगता कि WP जोड़ने को तोड़ता है, लेकिन मैं चाहता हूं कि वे हों <br>और नहीं <br />। मैं अपने नियंत्रण को कैसे नियंत्रित कर सकता हूं कि वे मेरे कोड में कैसे दिखते हैं?

संपादित करें: मैं केवल वास्तव में <br>टैग मुद्दे के बारे में परवाह करता हूं, मुझे इसके द्वारा किए गए टाइपोग्राफिक परिवर्तनों से कोई फर्क नहीं पड़ता।

EDIT2: वास्तव में, मुझे लगता है कि <img>टैग भी मायने रखते हैं। कोई भी स्व-समापन स्टैंडअलोन टैग यहां मायने रखेगा। तो, <hr>यह एक मुद्दा भी हो सकता है। ऐसी wp_head()वस्तुओं का उल्लेख नहीं करना चाहिए जैसे <link>और विभिन्न <meta>टैग।


1
क्या बुराई है <br />?
स्कॉट एम।

2
यह ठीक है, लेकिन अगर मैं एचटीएमएल 5 के गैर-XML संस्करण पर ध्यान केंद्रित करना चाहता हूं, तो मैं एक्सएमएल-शैली `/> अंत नहीं चाहता।
आर्टलुंग

मुझे लगा कि <br /> HTML और xHTML वैध था? यह कब नहीं था?
रयान गिब्बन्स

5
मेरा मानना ​​है कि यह सवाल बेहद भ्रामक है। wptexturize किसी भी तरह से, HTML 5 को अनुपालन करने वाली साइट से नहीं रोकता है।
रयान गिबन्स

2
क्या कोई कृपया इसे "वर्डप्रेस-जनरेट मार्कअप में स्व-समापन तत्वों से ट्रेलिंग-स्लैश को कैसे हटा सकता है" की तर्ज पर फिर से शीर्षक दे सकता है?
बॉबी जैक

जवाबों:


21

लाइन ब्रेक द्वारा जोड़ा जाता है wpautop(), नहीं wptexturize()wpautop()वह फ़ंक्शन भी है जो स्वचालित रूप से अनुच्छेद टैग जोड़ता है।

<br />फ़िल्टर को बदलने से आप बेहतर कर रहे हैं। चूंकि wpautop()प्राथमिकता 10 पर चलती है, आप उसके बाद बस हुक कर सकते हैं और इसे ठीक कर सकते हैं।

add_filter( 'the_content', 'html5_line_breaks', 25 );

function html5_line_breaks( $content ) {
    return str_replace( '<br />', '<br>', $content );
}

ओपी अपडेट के बाद संपादित करें:

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

यह थोड़ा बदसूरत है और प्रदर्शन पर इसका थोड़ा प्रभाव हो सकता है, लेकिन यहां आप जाते हैं (इसे प्लग इन या अपनी थीम की functions.phpफ़ाइल में छोड़ दें):

if ( !is_admin() && ( ! defined('DOING_AJAX') || ( defined('DOING_AJAX') && ! DOING_AJAX ) ) ) {
    ob_start( 'html5_slash_fixer' );
    add_action( 'shutdown', 'html5_slash_fixer_flush' );
}

function html5_slash_fixer( $buffer ) {
    return str_replace( ' />', '>', $buffer );
}

function html5_slash_fixer_flush() {
    ob_end_flush();
}

वह कोड कहता है कि यदि आप प्रशासन क्षेत्र में नहीं हैं और AJAX अनुरोध नहीं कर रहे हैं, तो फ़िल्टर के माध्यम से आउटपुट को बफ़र करना शुरू करें और फिर वर्डप्रेस शटडाउन हुक का उपयोग करते हुए, उस बफर को आउटपुट करें।


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

@ थोमस: आपकी थीम functions.php फाइल एक प्लगइन फाइल की तरह है। वहां कोई भी कोड अपने आप निष्पादित हो जाएगा। इससे कोई फर्क नहीं पड़ता कि यह वैध PHP के रूप में लंबे समय तक चला जाता है।
Viper007Bond

आह। दिलचस्प। मैं वर्डप्रेस विकास के लिए काफी नया हूं, इसलिए मैं अभी भी बहुत कुछ सीख रहा हूं। इसे साफ करने के लिए धन्यवाद।
थॉमस ओवंस

8

हेयर यू गो:

function my_awesome_tag_fixer( $input ){
  return preg_replace( '/(<.+)\s\/>/', '$1>', $input );
}

foreach( array('the_content', 'the_excerpt', 'comment_text') as $filter )
  add_filter( $filter, 'my_awesome_tag_fixer', 12 );

यह सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन यह इसे फिर से लिखने और wptuturize की तुलना में बहुत तेज कर देता है।


1
+1 मैंने HTML 4.01 सख्त अनुपालन के लिए बहुत कुछ समान किया।
ट्रेवर ब्रम्बल

7

बस मिल गया; शून्य तत्वों पर स्व-समापन टैग मान्य HTML हैं।

In HTML5 we've allowed the / on void elements (like <meta>, <img>, <br>, <input>, etc), to ease migration to and from XML.

http://lists.whatwg.org/pipermail/help-whatwg.org/2008-August/000137.html

अधिक जानकारी:

http://wiki.whatwg.org/wiki/FAQ#Should_I_close_empty_elements_with_.2F.3E_or_.3E.3F


1
"हालांकि, XHTML1 का उपयोग करने के व्यापक प्रयासों के कारण, अनुगामी स्लैश का उपयोग करने वाले पृष्ठों की एक महत्वपूर्ण संख्या है। इस वजह से, HTML में शून्य तत्वों पर अनुगामी स्लैश सिंटैक्स की अनुमति दी गई है ताकि XHTML1 से HTML5 में प्रवासन को आसान बनाया जा सके। " एक विरासत के रूप में अनुमति दी। मुझे लगता है कि आगे का रास्ता अतिरिक्त "/" को खोद रहा है, इस प्रकार मेरा प्रश्न। मुझे लगता है कि वर्डप्रेस को एक्सएचटीएमएल, या एचटीएमएल 4.01 या एचटीएमएल 5 को कोड बनाने के विकल्प की अनुमति देने की आवश्यकता है।
Artlung

यही वह समस्या है जो आप पढ़ रहे हैं जो कहा जा रहा है। ट्रेलिंग स्लैश की अनुमति है, जिसका अर्थ है कि यह वैध सिंटैक्स है। आप अनुमान लगा रहे हैं कि इसे हटाया जा रहा है? क्यों लगता है कि मानक कहाँ जा रहे हैं और एक समस्या को हल करने के लिए काम करते हैं जो मौजूद नहीं है?
रेयान गिब्बन्स

मैं किसी चीज पर अटकल नहीं लगा रहा हूं। मैं किसी चीज में अनुमान नहीं लगा रहा हूं। / निशान की कल्पना की आवश्यकता नहीं है, और मैं इसे वर्डप्रेस में निकालने का विकल्प चाहता हूं।
आर्टलंग

मुझे एक्सएचटीएमएल पसंद है, क्या हमें पुराने HTML के अव्यवस्थित रूप से वापस जाना है।
बजे Arlen Beiler

अर्लेन, मुझे अर्दली html पसंद है, मुझे xhtml पसंद है। मैं सत्यापनकर्ताओं का बहुत बड़ा प्रशंसक हूं। मैंने अपने कोड पर सत्यापन करने के लिए अपना स्वयं का सिद्धांत लिखा है। मैंने html 3.2, html 4, 4.01, यहां तक ​​कि html 2.0 का उपयोग किया है! lab.artlung.com/html-2.0 - लेकिन मैं वर्डप्रेस में स्व-समापन टैग को हटाने का विकल्प चाहूंगा। ऐसा नहीं लगता कि यह इतनी बड़ी बात होनी चाहिए। मुझे ऐसा लगता है कि मेरे सवाल के आधार पर बहस करना बहुत ही बेकार है।
आर्टलुंग

6

यह फंक्शन का लाभ उठाकर जैसे विषय के function.php फ़ाइल में अक्षम किया जा सकता है remove_filter()(http://codex.wordpress.org/Function_Reference/remove_filter)

remove_filter("the_content", "wptexturize");

1
क्या मुझे इस पर अधिक दानेदार नियंत्रण मिल सकता है? यदि मैं इस तरह से करूँ तो क्या मुझे टाइपोग्राफिक निशान नहीं खोना है?
आर्टलुंग

मैं अपने सिर के ऊपर से किसी भी सरल दृष्टिकोण से अवगत नहीं हूं, लेकिन मुझे यह देखने दें कि मैं आपके लिए क्या समझ सकता हूं।
थोमसजो

में पाई गई वांछित कार्यक्षमता को पुन: पेश करने की कमी wptexturize(), मैं किसी अन्य व्यवहार्य समाधान को खोजने में असमर्थ था।
थोमसजो

मुझे आश्चर्य है कि अगर वहाँ एक तरीका होगा <br />- <br>शायद उन लोगों के साथ बदलें ?
आर्टलुंग

5

मेरे पास html5 और वर्डप्रेस के लिए एक स्टार्टर थीम है और यह भी एक फ़ंक्शन नहीं है wptexturize के लिए, लेकिन wpautop () के लिए। Html के अन्य तत्वों को भी शामिल करें, जैसे thead, tfoot, एक तरफ और html5 के सिंटैक्स का उपयोग करें जैसे
और

/**
 * wpautop for HTML5, allowed: table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|header|footer|hgroup|figure|details|figcaption|summary)
 * @link http://nicolasgallagher.com/using-html5-elements-in-wordpress-post-content/
 * @author nicolas@nicolasgallagher.com
 */
function html5wpautop($pee, $br = 1) {
    if ( trim($pee) === '' )
            return '';

    $pee = $pee . "\n"; // just to make things a little easier, pad the end
    $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
    // Space things out a little
    // *insertion* of section|article|aside|header|footer|hgroup|figure|details|figcaption|summary
    $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|header|footer|hgroup|figure|details|figcaption|summary)';
    $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
    $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
    $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
    if ( strpos($pee, '<object') !== false ) {
            $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
            $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
    }
    $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
    // make paragraphs, including one at the end
    $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
    $pee = '';
    foreach ( $pees as $tinkle )
            $pee .= '<p>' . trim($tinkle, "\n") . "</p>\n";
    $pee = preg_replace('|<p>\s*</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
    // *insertion* of section|article|aside
    $pee = preg_replace('!<p>([^<]+)</(div|address|form|section|article|aside)>!', "<p>$1</p></$2>", $pee);
    $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
    $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
    $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
    $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
    $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
    if ($br) {
            $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', create_function('$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);'), $pee);
            $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
            $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
    }
    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    // *insertion* of img|figcaption|summary
    $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol|img|figcaption|summary)[^>]*>)!', '$1', $pee);
    if (strpos($pee, '<pre') !== false)
            $pee = preg_replace_callback('!(<pre[^>]*>)(.*?)</pre>!is', 'clean_pre', $pee );
    $pee = preg_replace( "|\n</p>$|", '</p>', $pee );

    return $pee;
}

// remove the original wpautop function
remove_filter('the_excerpt', 'wpautop');
remove_filter('the_content', 'wpautop');

// add our new html5autop function
add_filter('the_excerpt', 'html5wpautop');
add_filter('the_content', 'html5wpautop');

html5 स्टार्टर थीम के svn पर अधिक देखें , फ्रेमवर्क नहीं!


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.