the_content boş paragraflar kaldırılsın mı?


33

Hey millet, sadece wordpress gönderimde boş paragraflar oluşturulmasını önlemek istiyorum. İçeriği el ile boşluk bırakmaya çalışırken bu oldukça sık olur.

Bunun neden etkili olmadığını bilmiyorum?

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

düzenleme / güncelleme:

Sorun bu gibi görünüyor:

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

Bu işlevi yazılarımda ve sayfalarımda bir tür kısa kod düzenini filtrelemek için kendim yaptım. Arka uçlarımda yazı tamamen paragraflar ve gereksiz boşluklar olmadan yapılsa da sonuç şöyle görünür:

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

Bu boş p'nin nereden geldiği hakkında bir fikrin var mı?



1
Filtrenizi çalıştırmadan önce bir wpautopşey yapmayı deneyin , örneğin. add_filter('the_content', 'qanda', 7 );..
t31os

@ t31os: Yorumunuzu bir cevaba taşıyabilir misiniz?
Jan Fabry

Yanıtlar:


20

WordPress otomatik olarak ekler <p>ve </p>bir yazı veya sayfadaki içerik kesmelerini ayıran etiketler. Bazı nedenlerden dolayı, bunları kaldırmak istiyorsanız veya gerek duyuyorsanız, aşağıdaki kod parçacıklarından birini kullanabilirsiniz.

Wpautop filtresini tamamen devre dışı bırakmak için şunları kullanabilirsiniz:

remove_filter('the_content', 'wpautop');

Bunun hala çalışmasını istiyorsanız, filtrenize daha sonra bir öncelik değeri eklemeyi deneyin:

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

2
teşekkür ederim! WordPress otomatik olarak p etiketleri ekler biliyorum. Ancak, içeriğimin bir yerinde (yalnızca bazı araçlarla incelendiğimde) yalnızca boş <p> </p> etiketlerinin olduğu bazı durumlar oluyor ... ... çok fazla yazı kaldırılırken ve düzenlenirken oluyor. Sadece içeriğimde boş paragraflar olmasını istemiyorum, hepsi bu. Paragraflara ihtiyacım var, boş olanlara değil. 99999 fark yaratmıyor. Sadece çalışmıyor wpautop filtresi istediğim şey değil. Tüm <p> 'leri ve otomatik biçimlendirmeyi önler. Sadece boş p istemiyorum!
mathiregister

Gönderimi güncelledim, böylece ne demek istediğimi anlayacaksın! Zaten içeriği filtreleyen bir işlev yaptım. divs ekler ve wordpress'in önce ve sonra <p> </p> ekli göründüğü görülüyor, anlayamadım. herhangi bir fikir?
mathiregister

21

Ben de seninle aynı problemi yaşadım. Ben sadece yaptım ... diyelim ... çok güzel bir çözüm değil, ama işe yarıyor ve şu ana kadar sahip olduğum tek çözüm bu. Küçük bir JavaScript satırı ekledim. JQuery'e ihtiyacı var, ama emin olmadan çözebilirsin.

Bu benim küçük JS'm:

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

Bu benim için çalışıyor!


oh bu tatlı bir küçük sayı değil mi! Bahşiş için teşekkürler - bu benim için çalışıyor ve başkası nasıl kullanacağını merak ettiğinde, sadece kendi temanın özel JS dosyasına koyun.
Sol

11
Bunu CSS ile de yapabilirsiniz:p:empty { display:none; }

@D_N Boş Paragraf etiketlerini gizlemek için CSS kullanma yalnızca işe yarar, <p></p>ancak işe yaramaz <p>\n</p>.
Michael Ecklund,

11

Bunun zaten 'çözülmüş' olarak işaretlendiğini biliyorum ama sadece referans olarak, işte yazılara herhangi bir işaretleme eklemek zorunda kalmadan tam olarak istediğinizi yapan bir işlev var. Bunu temanın işlevlerine koymanız yeterli. 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);
}

Bu, bu fikirden: https://gist.github.com/1668216


6
Force_balance_tags () kullanımı hakkında küçük bir not ... JavaScript içeren bir içerikte kullanıldığında, bu fonksiyonun neden olduğu zor bir hatayla karşılaştım (JS bir formda ajax kullanırken Gravity Formları'ndan geliyordu). Bazı durumlarda karakterle force_balance_tagskarşılaştığında bilinen sorunlar vardır <. Ayrıntılar için [9270] biletine bakınız ( core.trac.wordpress.org/ticket/9270 ).
Dave Romsey

Dave tarafından da vurgulanan aynı problemi yaşadım: snippet, gömülü youtube videosunu kaldırdı ve bu da amp sayfalarında doğrulama sorunlarına neden oldu.
Marco Panichi

11

Basitçe CSS kullanın

p:empty {
  display: none;
}

Lütfen cevabınıza bir açıklama ekleyin
Pieter Goosen

4
@PieterGoosen zaten kendi kendini açıklayıcı
en az üç karakter

Bunları boşluk göstermek için görüntülemekten kaçınmak istiyorsanız, bu IE9'a kadar iyi sonuç verir. caniuse.com/#feat=css-sel3 ve developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty daha fazlası için.
olacak

1
CSS seçici yöntemiyle hoş bir seçenek, var olduğunu bilmiyordu. Teşekkürler!
i_a

1
Bilginize: &nbsp;<p> etiketinin içinde varsa, bu işe yaramaz.
RynoRn

5

Filtreni, pis wpautopkanca takmadan ve işaretleme ile karıştırmadan önce çalıştırabilirsin .

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

Bu şekilde, zaten bağlı olduğu zaman ihtiyaç duyduğunuz şeyi dönüştürdünüz, bu bazı durumlarda yardımcı oluyor.


3

Benden önce 2 cevapla aynı yaklaşım, ancak güncellenmiş bir regex, çünkü onun benim için işe yaramadı.

regex: /<p>(?:\s|&nbsp;)*?<\/p>/i ( &nbsp;p harfinin içinde herhangi bir boşluk veya s arayan herhangi bir yakalama grubu değil , hepsi büyük / küçük harf.

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

0

Bunu garip buldum, ama aslında arama the_content()açıkladığınız şekilde paragraf ekleyecektir. HTML kodunu istiyorsanız, temelde girdiğiniz gibi (düzenlerken "HTML'yi görüntüle" ile aynı), get_the_content()içeriği biçimlendirmeden ve paragraf etiketlerini döndürmeden kullanın .

Döndüğü için, şöyle bir şey kullandığınızdan emin olun:

echo get_the_content ();

Ayrıca bakınız: http://codex.wordpress.org/Function_Reference/get_the_content


peki, teşekkür ederim. Ancak bunu istemiyorum! Normal paragraflara ihtiyacım var. Birincisi anlamsal işaretleme ve ikincisi de olması gerektiği gibi. Sadece mantıklı gelmeyen boş paragraflarım yok! Basitçe, bu paragraflara uygulanan stil uygulamam nedeniyle, bu paragrafta boş paragraflar da görünüyor ve sayfam tuhaf görünüyor.
mathiregister

Add_filter olayımın neden işe yaramadığını merak ediyorum.
mathiregister

Yakaladım. Denemeyi önerebileceğim tek şey, HTML’den görselliğe ve bir veya iki defa geri dönmektir. WYSIWYG editörü yüklendiğinde boş paragraf etiketlerini kaldırdığına inanıyorum.
cwd

0

Bu, dizideki tüm boş html etiketlerini yinelemeli olarak kaldırır

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

Desen http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.html adresinden alınmıştır.


0

<p>İçeriğinde boşluk bulunan etiketler varsa , gönderinize gidin veya görsel stilde olmayan bir düzenleme yapın.

&nbsp;orada bazılarını bulabilirsin .. Sil ve boş <p>etiketler kaybolur.


0

Olmadan sadece html içeriğine sahip olmak için

etiketleri, yazıyı veya sayfayı biçimlendirmeden sadece html'yi koymak için aşağıdaki döngüyü kullanabiliriz.

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
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.