Cum să elimini paragrafele goale din the_content?

3 apr. 2011, 13:13:16
Vizualizări: 94.3K
Voturi: 39

Bună tuturor, Pur și simplu vreau să evit crearea de paragrafe goale în postările mele WordPress. Acest lucru se întâmplă destul de des când încerc să spațiez manual conținutul.

Nu înțeleg de ce această funcție nu are efect?

/*Elimină tag-urile de paragraf goale din 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');

edit/actualizare:

se pare că problema este aceasta:

function qanda($content) {

    // filtrează pentru [q=o întrebare] și [a=un răspuns]
    // le înfășoară în <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');

Am creat această funcție pentru a filtra un tip de model de shortcode în postările și paginile mele. Chiar dacă în backend postarea este complet fără paragrafe și spații inutile, rezultatul arată astfel:

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

aveți vreo idee de unde provin aceste tag-uri p goale?

3
Comentarii

Încearcă să rulezi filtrul înainte ca wpautop să își facă treaba, de exemplu: add_filter('the_content', 'qanda', 7 );..

t31os t31os
4 apr. 2011 01:16:10

@t31os: Poți să muti comentariul tău într-un răspuns ca să putem vota pentru el?

Jan Fabry Jan Fabry
6 apr. 2011 15:31:22
Toate răspunsurile la întrebare 11
3
25

Am avut aceeași problemă pe care o ai tu. Am făcut o... să zicem... soluție nu foarte frumoasă, dar funcționează și până acum este singura soluție pe care o am. Am adăugat o mică linie de JavaScript. Are nevoie de jQuery, dar sunt sigur că te poți descurca și fără.

Iată micul meu cod JS:

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

Funcționează pentru mine!

2 ian. 2012 12:00:02
Comentarii

Oh, ce drăguț lucrușor! Mulțumesc pentru pont - funcționează pentru mine și în cazul în care cineva altcineva s-a întrebat cum să-l folosească, doar puneți-l în fișierul JS personalizat al temei dumneavoastră.

SolaceBeforeDawn SolaceBeforeDawn
6 sept. 2012 08:08:07

Puteți face asta și cu CSS: p:empty { display:none; }

User User
20 iul. 2016 04:42:00

@D_N Folosirea CSS pentru a ascunde tag-urile de paragraf goale funcționează doar pentru <p></p> dar nu funcționează pentru <p>\n</p>.

Michael Ecklund Michael Ecklund
21 apr. 2017 23:51:33
6
23

Pur și simplu folosește CSS

p:empty {
  display: none;
}
30 sept. 2015 16:24:27
Comentarii

Te rog să adaugi o explicație la răspunsul tău

Pieter Goosen Pieter Goosen
30 sept. 2015 16:49:24

@PieterGoosen este deja auto-explicativ

at least three characters at least three characters
1 oct. 2015 15:23:54

Dacă vrei doar să eviți afișarea lor din motive de spațiere, această soluție funcționează bine până la IE9. http://caniuse.com/#feat=css-sel3 și https://developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty pentru mai multe informații.

Will Will
3 ian. 2016 23:11:32

opțiune interesantă cu metoda selectorului CSS, nu știam că există. mulțumesc!

i_a i_a
14 apr. 2016 14:47:18

FYI: Dacă există &nbsp; în interiorul tag-ului <p>, această soluție nu va funcționa.

laszlo-horvath laszlo-horvath
6 iun. 2019 17:52:04

Această soluție nu funcționează de fapt.

pjk_ok pjk_ok
5 ian. 2021 00:27:08
Arată celelalte 1 comentarii
2
22

WordPress va insera automat tag-urile <p> și </p> care separă întreruperile de conținut într-un articol sau pagină. Dacă, din anumite motive, doriți sau aveți nevoie să eliminați acestea, puteți utiliza oricare dintre următoarele fragmente de cod.

Pentru a dezactiva complet filtrul wpautop, puteți folosi:

remove_filter('the_content', 'wpautop');

Dacă încă doriți ca această funcție să funcționeze, încercați să adăugați o valoare de prioritate mai mare filtrului dvs., de exemplu:

add_filter('the_content', 'removeEmptyParagraphs', 99999);
3 apr. 2011 15:15:51
Comentarii

mulțumesc! Știu că WordPress inserează automat tag-uri p. Totuși, există cazuri în care apar doar tag-uri goale <p></p> undeva în conținut (când le inspectez cu unele instrumente)... asta se întâmplă când fac multe ștergeri și editări de articole. Pur și simplu nu vreau să am paragrafe goale în conținutul meu, atât. Am nevoie de paragrafe, dar nu de cele goale. Valoarea 99999 nu face nicio diferență. Pur și simplu nu funcționează. Filtrul wpautop nu este ceea ce vreau. Acesta prevenește toate <p>-urile și formatarea automată. Eu pur și simplu nu vreau niciun p gol!

mathiregister mathiregister
3 apr. 2011 15:23:07

am actualizat postarea mea ca să înțelegi la ce mă refer! am creat o funcție care filtrează deja conținutul. Aceasta inserează div-uri și se pare că WordPress inserează <p></p> înainte și după, pur și simplu nu înțeleg. Ai vreo idee?

mathiregister mathiregister
3 apr. 2011 16:02:39
2
15

Știu că această problemă este deja marcată ca 'rezolvată', dar doar pentru referință, iată o funcție care face exact ceea ce doriți fără a fi nevoie să adăugați nicio marcare în postări. Puneți acest cod în fișierul functions.php al temei dumneavoastră:

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

Acest cod este preluat din acest gist: https://gist.github.com/1668216

23 mai 2012 01:03:32
Comentarii

Doar o mică notă despre utilizarea funcției force_balance_tags()...

Am dat peste o problemă complicată cauzată de această funcție atunci când a fost folosită pe conținut care includea JavaScript (JS venea de la Gravity Forms când foloseam ajax pe un formular). Există probleme cunoscute cu force_balance_tags atunci când întâlnește caracterul < în anumite situații. Consultați tichetul 9270 pentru detalii.

Dave Romsey Dave Romsey
15 aug. 2013 00:56:57

Am avut aceeași problemă evidențiată de Dave: fragmentul de cod a eliminat videoclipul YouTube embedded și asta a cauzat probleme de validare și pe paginile AMP.

Marco Panichi Marco Panichi
29 iun. 2019 15:14:49
0

Ai putea pur și simplu să rulezi filtrul tău înainte ca acel enervant wpautop să se atașeze și să încurce marcajul.

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

În acest fel, deja ai convertit ceea ce ai nevoie până când acesta se atașează, ceea ce ajută în unele cazuri.

6 apr. 2011 15:40:17
0

Aceeași abordare ca cele 2 răspunsuri de dinaintea mea, dar cu o expresie regulată actualizată, pentru că a lui nu a funcționat pentru mine.

expresia regulată: /<p>(?:\s|&nbsp;)*?<\/p>/i (grup non-capturant care caută orice număr de spații albe sau &nbsp; în interiorul tag-ului p, toate insensibile la majuscule/minuscule.

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);
6 dec. 2017 12:33:01
3

Am găsit acest lucru ciudat, dar de fapt apelarea funcției the_content() va insera paragrafe în modul descris de tine. Dacă dorești codul HTML, practic așa cum l-ai introdus (la fel ca "view HTML" când editezi), atunci folosește get_the_content() care returnează conținutul fără formatare și fără tag-uri de paragraf.

Deoarece returnează conținutul, asigură-te că folosești ceva de genul:

echo get_the_content();

Vezi și: http://codex.wordpress.org/Function_Reference/get_the_content

3 apr. 2011 17:40:24
Comentarii

bine, mulțumesc. Totuși nu vreau asta! Am nevoie de paragrafe normale. În primul rând este markup semantic și în al doilea rând așa ar trebui să fie. Nu vreau să am paragrafe goale care nu au sens! Pur și simplu pentru că am stiluri aplicate acestor paragrafe, iar paragrafele goale apar cu acest stil și pagina mea arată ciudat.

mathiregister mathiregister
3 apr. 2011 17:54:39

De fapt, mă întreb de ce funcția mea add_filter nu funcționează?

mathiregister mathiregister
3 apr. 2011 17:55:00

Am înțeles. Ei bine, un lucru pe care aș recomanda să încerci este să treci de la HTML la vizual și înapoi de câteva ori. Cred că atunci când editorul WYSIWYG se încarcă, el elimină tag-urile de paragraf goale.

cwd cwd
4 apr. 2011 06:11:15
0

Aceasta va elimina recursiv toate tag-urile HTML goale din șirul de caractere

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Returnează dacă șirul nu este dat sau este gol.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Tag-uri HTML goale recursive.
       return preg_replace (

              //** Model scris de Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU',

             //** Înlocuiește cu nimic dacă șirul este gol.
             !is_string ($repto) ? '' : $repto,

            //** Șirul sursă
           $str
);}

Modelul este preluat de la http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.html

7 mai 2014 16:37:39
0

Dacă ai taguri <p> cu spații goale în conținut, mergi la postarea sau pagina ta și editează-o fără a folosi modul vizual.

Vei găsi câteva &nbsp; acolo... Șterge-le și tagurile goale <p> vor dispărea.

15 mai 2017 13:33:03
0

Pentru a avea doar conținutul HTML fără tag-uri

putem folosi următoarea buclă pentru a afișa doar HTML-ul fără formatarea articolului sau paginii

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
19 sept. 2018 14:15:56
0

Dacă obțineți un tag <p> gol în partea de sus a paginii sau a articolului, acesta este de obicei cauzat de încadrarea lui <?php the_content();?> în tag-uri de paragraf.

PROBLEMA

Acesta este motivul pentru care apare tag-ul <p> neașteptat în partea de sus a paginii/articolului:

<p><?php the_content();?></p>

SOLUȚIA

Dacă eliminați tag-urile <p> și păstrați doar tag-ul de șablon, veți rezolva problema.

<?php the_content();?>

5 ian. 2021 00:37:22