ลบย่อหน้าที่ว่างเปล่าออกจาก the_content หรือไม่


33

เฮ้พวกฉันแค่ต้องการป้องกันการสร้างย่อหน้าที่ว่างในโพสต์ WordPress ของฉัน ที่เกิดขึ้นค่อนข้างบ่อยเมื่อพยายามพื้นที่เนื้อหาด้วยตนเอง

ฉันไม่รู้ว่าทำไมสิ่งนี้จึงไม่มีผล

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

ความคิดใดที่ p ว่างเปล่านี้มาจากไหน



1
ลองใช้ตัวกรองของคุณก่อนwpautopทำสิ่งนั้นเช่น add_filter('the_content', 'qanda', 7 );..
t31os

@ t31os: คุณสามารถย้ายความคิดเห็นของคุณไปยังคำตอบเพื่อให้เราสามารถลงคะแนนได้หรือไม่
Jan Fabry

คำตอบ:


20

WordPress จะแทรก<p>และ</p>แท็กโดยอัตโนมัติซึ่งแยกการแบ่งเนื้อหาภายในโพสต์หรือหน้า หากด้วยเหตุผลบางอย่างคุณต้องการหรือต้องการลบสิ่งเหล่านี้คุณสามารถใช้ตัวอย่างโค้ดต่อไปนี้

หากต้องการปิดใช้งานตัวกรอง wpautop อย่างสมบูรณ์คุณสามารถใช้:

remove_filter('the_content', 'wpautop');

หากคุณยังต้องการให้ฟังก์ชันนี้ลองเพิ่มค่าลำดับความสำคัญในภายหลังให้กับตัวกรองของคุณเช่น:

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

2
ขอขอบคุณ! ฉันรู้ว่า wordpress แทรกแท็กโดยอัตโนมัติ อย่างไรก็ตามมีบางกรณีที่มีแท็ก <p> </p> ที่ว่างเปล่าอยู่ที่ไหนสักแห่งในเนื้อหาของฉัน (เมื่อฉันตรวจสอบด้วยเครื่องมือบางอย่าง) ... ที่เกิดขึ้นเมื่อทำการลบและแก้ไขโพสต์จำนวนมาก ฉันไม่ต้องการมีย่อหน้าที่ว่างเปล่าในเนื้อหาของฉันนั่นคือทั้งหมด ฉันต้องการย่อหน้าไม่ใช่แค่ย่อหน้าที่ว่างเปล่า 99999 ไม่ได้สร้างความแตกต่าง ไม่ทำงาน ตัวกรอง wpautop ไม่ใช่สิ่งที่ฉันต้องการ มันป้องกันการจัดรูปแบบอัตโนมัติและ <p> ทั้งหมด ฉันแค่ไม่ต้องการ p ว่าง ๆ !
mathiregister

ฉันอัปเดตโพสต์ของฉันเพื่อให้คุณเห็นสิ่งที่ฉันหมายถึง! ฉันทำหน้าที่ที่กรองเนื้อหาอยู่แล้ว มันแทรก divs และดูเหมือนว่า wordpress กำลังแทรก <p> </p> ก่อนและหลังมันฉันไม่ได้รับมัน ความคิดใด ๆ
mathiregister

21

ฉันมีปัญหาเดียวกันกับที่คุณมี ฉันเพิ่งทำ ... สมมุติว่า ... ไม่ใช่วิธีแก้ปัญหาที่สวยงามมาก แต่มันใช้งานได้และจนถึงตอนนี้ก็เป็นทางออกเดียวที่ฉันมี ฉันเพิ่มบรรทัด JavaScript เล็กน้อย มันต้องการ jQuery แต่ฉันแน่ใจว่าคุณสามารถเข้าใจมันได้โดยไม่ต้อง

นี่คือ JS ตัวจิ๋วของฉัน:

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

มันใช้งานได้สำหรับฉัน!


โอ้ไม่ว่าตัวเลขน้อยน่ารัก! ขอบคุณสำหรับเคล็ดลับ - มันใช้งานได้สำหรับฉันและในกรณีที่คนอื่นสงสัยว่าจะใช้งานอย่างไรเพียงแค่วางลงในไฟล์ JS ที่กำหนดเองของธีมของคุณ
โซล

11
คุณสามารถทำได้ด้วย CSS:p:empty { display:none; }

@D_N การใช้ CSS เพื่อซ่อนแท็กวรรคว่างใช้งานได้<p></p>แต่ไม่สามารถใช้งาน<p>\n</p>ได้
Michael Ecklund

11

ฉันรู้ว่านี่ถูกทำเครื่องหมายว่า 'แก้ไขแล้ว' แต่เพื่อการอ้างอิงนี่คือฟังก์ชันที่ทำสิ่งที่คุณต้องการโดยไม่ต้องเพิ่มมาร์กอัปใด ๆ ลงในโพสต์ เพียงแค่ใส่สิ่งนี้ในฟังก์ชั่นธีมของคุณ php:

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

นี่คือจากส่วนสำคัญนี้: https://gist.github.com/1668216


6
เพิ่งทราบเล็กน้อยเกี่ยวกับการใช้ force_balance_tags () ... ฉันพบข้อผิดพลาดอันยุ่งยากที่เกิดจากฟังก์ชั่นนี้เมื่อมันถูกใช้กับเนื้อหาที่รวม JavaScript (JS มาจาก Gravity Forms เมื่อใช้ ajax บนแบบฟอร์ม) มีปัญหาที่ทราบforce_balance_tagsเมื่อพบ<ตัวละครในบางสถานการณ์ ดูตั๋ว [9270] ( core.trac.wordpress.org/ticket/9270 ) สำหรับรายละเอียด
Dave Romsey

ฉันมีปัญหาเดียวกันที่เน้นโดยเดฟ: ตัวอย่างลบวิดีโอ youtube ที่ฝังอยู่และที่ทำให้เกิดปัญหาการตรวจสอบในหน้าแอมป์ด้วย
Marco Panichi

11

เพียงใช้ CSS

p:empty {
  display: none;
}

โปรดเพิ่มคำอธิบายให้กับคำตอบของคุณ
Pieter Goosen

4
@PieterGoosen เป็นคำอธิบายตัวเองแล้ว
อย่างน้อยสามตัวอักษร

หากคุณเพียงแค่ต้องการหลีกเลี่ยงการแสดงผลเพื่อการเว้นวรรคก็สามารถใช้งานได้ดีกับ IE9 caniuse.com/#feat=css-sel3และdeveloper.mozilla.org/en-US/docs/Web/CSS/%3Aemptyสำหรับข้อมูลเพิ่มเติม
Will

1
ตัวเลือกที่ดีด้วยวิธีเลือก CSS ไม่ทราบว่ามีอยู่จริง ขอบคุณ!
i_a

1
FYI: หากมี&nbsp;แท็ก <p> อยู่ภายในจะไม่สามารถใช้งานได้
RynoRn

5

คุณสามารถเรียกใช้ตัวกรองของคุณก่อนที่wpautopตะขอที่น่ารังเกียจและยุ่งเหยิงกับมาร์กอัป

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

ด้วยวิธีนี้คุณได้แปลงสิ่งที่คุณต้องการในเวลาที่ขอซึ่งจะช่วยในบางกรณี


3

วิธีการเดียวกันมากกว่า 2 คำตอบก่อนหน้าฉัน แต่ regex ที่อัปเดตเพราะเขาไม่ได้ทำงานให้ฉัน

regex: /<p>(?:\s|&nbsp;)*?<\/p>/i (ไม่ใช่กลุ่มการจับภาพที่กำลังมองหาหมายเลขใด ๆ ของช่องว่างหรือ&nbsp;s ภายใน p-tag ทุกกรณีไม่รู้สึก

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()สิ่งที่ส่งคืนเนื้อหาโดยไม่ต้องจัดรูปแบบและแท็กวรรค

เนื่องจากมันคืนมาให้แน่ใจว่าคุณใช้สิ่งที่ชอบ:

echo get_the_content ();

ดูเพิ่มเติมที่: http://codex.wordpress.org/Function_Reference/get_the_content


ดีขอบคุณ อย่างไรก็ตามฉันไม่ต้องการมัน! ฉันต้องการย่อหน้าปกติ อย่างแรกคือมาร์กอัปความหมายและอย่างที่สองก็เป็นอย่างที่ควรจะเป็น ฉันแค่ไม่มีย่อหน้าที่ว่างเปล่าที่ไม่สมเหตุสมผล! เพียงเพราะฉันมีสไตล์ที่ใช้กับย่อหน้าเหล่านั้นและย่อหน้าที่ว่างเปล่าก็ปรากฏขึ้นพร้อมกับสไตล์นี้และหน้าของฉันดูแปลก ๆ
mathiregister

ฉันสงสัยว่าทำไม add_filter thingy ของฉันถึงใช้งานไม่ได้
mathiregister

Gotcha สิ่งหนึ่งที่ฉันอยากจะแนะนำคือพยายามเปลี่ยนจาก HTML เป็น visual และย้อนกลับไปหนึ่งหรือสองครั้ง ฉันเชื่อว่าเมื่อตัวแก้ไข 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-tags.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; ?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.