The_content से खाली पैराग्राफ़ हटाएं?


33

हे दोस्तों, मैं बस अपने वर्डप्रेस पोस्ट में खाली पैराग्राफ के निर्माण को रोकना चाहता हूं। मैन्युअल रूप से अंतरिक्ष सामग्री की कोशिश करते समय ऐसा अक्सर होता है।

मुझे नहीं पता कि यह प्रभावी क्यों नहीं है?

/*Remove empty paragraph tags from the_content*/
function removeEmptyParagraphs($content) {

    /*$pattern = "/<p[^>]*><\\/p[^>]*>/";   
    $content = preg_replace($pattern, '', $content);*/
    $content = str_replace("<p></p>","",$content);
    return $content;
}

add_filter('the_content', 'removeEmptyParagraphs');

संपादित करें / अद्यतन:

ऐसा लगता है कि समस्या यह है:

function qanda($content) {

    // filters for [q=some question] and [a=some answer]
    // wraps it inside of <div class="qanda"><div class="question"> </div><div class="answer"> </div></div>
    $content = preg_replace('/\[q=(.+?)].+?\[a=(.+?)]/is', '<div class="qanda"><div class="question">$1</div><div class="answer">$2</div></div>', $content);

    return $content;
}

add_filter('the_content', 'qanda');

मैंने यह कार्य अपने पोस्ट और पृष्ठों में एक प्रकार के शोर्ट-पैटर्न के लिए फ़िल्टर करने के लिए किया। हालांकि मेरे बैकएंड में पोस्ट पूरी तरह से पैराग्राफ और अनावश्यक स्पेसिंग के बिना किया जाता है लेकिन परिणाम इस तरह दिखता है:

<div class="entry">

    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>

</div>

किसी भी विचार जहां इस खाली पी से आते हैं?



1
इससे पहले wpautopकि यह बात है, जैसे अपने फ़िल्टर को चलाने का प्रयास करें । add_filter('the_content', 'qanda', 7 );..
t31os

@ t31os: क्या आप अपनी टिप्पणी को एक उत्तर में स्थानांतरित कर सकते हैं ताकि हम उस पर वोट कर सकें?
जन फैब्री

जवाबों:


20

वर्डप्रेस स्वचालित रूप से सम्मिलित <p>और </p>टैग करेगा जो एक पोस्ट या पेज के भीतर अलग-अलग सामग्री को तोड़ते हैं। यदि, किसी कारण से, आप इन्हें हटाना या चाहते हैं, तो आप निम्नलिखित कोड स्निपेट में से किसी एक का उपयोग कर सकते हैं।

पूरी तरह से wpautop फ़िल्टर को अक्षम करने के लिए, आप इसका उपयोग कर सकते हैं:

remove_filter('the_content', 'wpautop');

यदि आप अभी भी चाहते हैं कि आपके फ़िल्टर के लिए बाद में प्राथमिकता मान जोड़ने की कोशिश करें, तो:

add_filter('the_content', 'removeEmptyParagraphs',99999);

2
धन्यवाद! मुझे पता है कि WordPress अपने आप p टैग सम्मिलित करता है। हालाँकि कुछ ऐसे मामले होते हैं जहाँ मेरी सामग्री में कहीं खाली <p> </ p> टैग होते हैं (जब मैं किसी टूल से इसका निरीक्षण करता हूँ) ... जो बहुत सारी हटाने और पोस्ट को संपादित करने के दौरान होता है। मैं बस अपनी सामग्री में खाली पैराग्राफ नहीं रखना चाहता, बस। मुझे पैराग्राफ की ज़रूरत है, बस खाली नहीं हैं। 99999 से कोई फर्क नहीं पड़ता। बस काम नहीं करता है। wpautop फ़िल्टर वह नहीं है जो मैं चाहता हूँ। यह सभी <p> 's और ऑटोफ़ॉर्मेटिंग को रोकता है। मुझे अभी कोई खाली पी नहीं चाहिए!
मैथिरेगिस्टर

मैंने अपनी पोस्ट अपडेट की तो आप देखें कि मेरा क्या मतलब है! मैंने एक फ़ंक्शन किया जो पहले से ही सामग्री को फ़िल्टर करता है। यह divs सम्मिलित करता है और ऐसा लगता है कि वर्डप्रेस डालने जा रहा है <p> </ p> इसके पहले और बाद में, मुझे बस नहीं मिला। कोई विचार?
मैथिरेगिस्टर 13

21

मुझे भी आपकी यही समस्या थी। मैंने सिर्फ एक ... चलो कहते हैं ... बहुत सुंदर समाधान नहीं है, लेकिन यह काम करता है और अब तक यह एकमात्र समाधान है जो मेरे पास है। मैंने थोड़ी जावास्क्रिप्ट लाइन जोड़ी। यह jQuery की जरूरत है, लेकिन मुझे यकीन है कि आप इसे बिना समझ सकते हैं।

यह मेरा छोटा जेएस है:

$('p:empty').remove();

यह मेरे लिए काम करता है!


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

11
आप इसे CSS:p:empty { display:none; }

@D_N खाली पैराग्राफ टैग को छिपाने के लिए CSS का उपयोग केवल काम करता है <p></p>लेकिन इसके लिए काम नहीं करता है <p>\n</p>
माइकल एक्लुंड

11

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

add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content){
    $content = force_balance_tags($content);
    return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
}

यह इस gist से है: https://gist.github.com/1668216


6
बल_बलेंस_टैग () का उपयोग करने के बारे में बस थोड़ा सा ध्यान दें ... मैं इस फ़ंक्शन के कारण एक मुश्किल बग में भाग गया जब इसका उपयोग सामग्री पर किया गया था जिसमें जावास्क्रिप्ट शामिल था (जेएस एक फॉर्म पर अजाक्स का उपयोग करते समय ग्रेविटी फॉर्म से आ रहा था)। कुछ स्थितियों में चरित्र का force_balance_tagsसामना करने के दौरान ज्ञात समस्याएं होती हैं <। विवरण के लिए टिकट [9270] ( core.trac.wordpress.org/ticket/9270 ) देखें।
डेव रोमसे

मुझे डेव द्वारा हाइलाइट की गई एक ही समस्या थी: स्निपेट ने एम्बेड किए गए यूट्यूब वीडियो को हटा दिया और इससे amp पृष्ठों पर सत्यापन की समस्या भी हुई।
मार्को पनीची

11

बस सीएसएस का उपयोग करें

p:empty {
  display: none;
}

कृपया अपने उत्तर में एक व्याख्या जोड़ें
पीटर गोएप

4
@PieterGoosen यह पहले से ही आत्म-व्याख्यात्मक है
पर कम से कम तीन अक्षर

यदि आप केवल रिक्ति उद्देश्यों के लिए उन्हें प्रदर्शित करने से बचना चाहते हैं, तो यह IE9 के लिए अच्छा काम करता है। caniuse.com/#feat=css-sel3 और developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty अधिक के लिए।
विल

1
CSS चयनकर्ता विधि के साथ अच्छा विकल्प, पता नहीं था कि यह अस्तित्व में है। धन्यवाद!
आई_ए

1
FYI करें: यदि &nbsp;<p> टैग के अंदर है तो यह काम नहीं करेगा।
रेनॉर्न

5

आप बस अपने फिल्टर को चला सकते हैं इससे पहले कि गंदा wpautopहुक लगे और मार्कअप के साथ गड़बड़ हो।

add_filter('the_content', 'qanda', 7 );

इस तरह, आपने पहले से ही उस समय तक बदल दिया है जब तक आपको हुक करने की आवश्यकता होती है, जो कुछ मामलों में मदद करता है।


3

मेरे सामने 2 जवाबों के समान ही, लेकिन एक अपडेटेड रेगेक्स, क्योंकि उसका मेरे लिए काम नहीं किया।

regex: /<p>(?:\s|&nbsp;)*?<\/p>/i (गैर कैप्चर समूह किसी भी संख्या में व्हॉट्सएप की तलाश कर रहा है या &nbsp;पी-टैग के अंदर है, सभी मामले असंवेदनशील हैं।

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);

0

मुझे यह अजीब लगा, लेकिन वास्तव में कॉलिंग the_content()आपके द्वारा वर्णित तरीके से पैराग्राफ सम्मिलित करेगी। यदि आप HTML कोड चाहते हैं, तो मूल रूप से जैसे आपने इसे दर्ज किया था (संपादन करते समय "HTML देखें" के समान), तो get_the_content()उस सामग्री का उपयोग करें जो स्वरूपण और अनुच्छेद टैग के बिना सामग्री लौटाती है।

चूंकि यह इसे वापस करता है, सुनिश्चित करें कि आप कुछ का उपयोग करते हैं:

इको get_the_content ();

इसे भी देखें: http://codex.wordpress.org/Function_Reference/get_the_content


खैर धन्यवाद। हालाँकि मैं ऐसा नहीं चाहता! मुझे सामान्य पैराग्राफ चाहिए। सबसे पहले यह शब्दार्थ मार्कअप है और दूसरा यह है कि यह जिस तरह से माना जाता है वह सिर्फ उसी तरह है। मैं सिर्फ खाली पैराग्राफ नहीं है कि समझ में नहीं आता है! सिर्फ इसलिए कि मैंने उन पैराग्राफों पर स्टाइल लगाया है, इस स्टाइल के साथ खाली पैराग्राफ भी दिखाई देते हैं और मेरा पेज अजीब लगता है।
mathiregister

मुझे आश्चर्य होता है कि मेरा add_filter काम क्यों नहीं करता है?
मैथिरेगिस्टर

पकड़ लिया। खैर एक बात मैं कोशिश करूँगा कि HTML से दृश्य और एक या दो बार वापस स्विच करना है। मेरा मानना ​​है कि जब WYSIWYG संपादक लोड करता है तो यह खाली पैराग्राफ टैग को हटा देता है।
cwd

0

यह स्ट्रिंग से सभी खाली HTML टैग को पुन: हटा देगा

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Return if string not given or empty.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Recursive empty HTML tags.
       return preg_replace (

              //** Pattern written by Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU',

             //** Replace with nothing if string empty.
             !is_string ($repto) ? '' : $repto,

            //** Source string
           $str
);}

पैटर्न http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-ags.html से लिया गया है


0

यदि आपके पास <p>सामग्री में व्हाट्सएप के साथ टैग हैं, तो अपनी पोस्ट पर जाएं या पृष्ठ को संपादित करें यह दृश्य शैली में नहीं है।

आपको &nbsp;वहां कुछ मिल जाएगा .. इसे हटा दें और खाली <p>टैग गायब हो जाएंगे।


0

आदेश में केवल HTML सामग्री के बिना है

टैग हम निम्नलिखित लूप का उपयोग कर सकते हैं पोस्ट या पृष्ठ के प्रारूपण के बिना केवल html को बाहर करने के लिए

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.