<?php | |
add_filter( 'the_content', 'remove_empty_p', 20, 1 ); | |
function remove_empty_p( $content ){ | |
// clean up p tags around block elements | |
$content = preg_replace( array( | |
'#<p>\s*<(div|aside|section|article|header|footer)#', | |
'#</(div|aside|section|article|header|footer)>\s*</p>#', | |
'#</(div|aside|section|article|header|footer)>\s*<br ?/?>#', | |
'#<(div|aside|section|article|header|footer)(.*?)>\s*</p>#', | |
'#<p>\s*</(div|aside|section|article|header|footer)#', | |
), array( | |
'<$1', | |
'</$1>', | |
'</$1>', | |
'<$1$2>', | |
'</$1', | |
), $content ); | |
return preg_replace('#<p>(\s| )*+(<br\s*/*>)*(\s| )*</p>#i', '', $content); | |
} |
jquery option is the best, add it to custom.js , under jquery document ready function
@kprovance Does not work for me either on WP4.3.1 :(
Worked wonders for me. This will literally save me hours trying to hunt down empty lines.
@ThornedRose it seems to work again in 4.4.1
Wow... this is really awesome. Thanks!
The guy posted this. (You are awesome
Glad To Report That It's Still Working
2017 and still working! Awesome work!
Like this
p:empty { display:none; }
Not working for me.. I have a shortcode that outputs a link along with a div container that is hidden with CSS and called when the link is clicked (as a modal). The div container, being a block element, causes the shortcode to end the paragraph early, show the div and then just has the remaining text sort of floating there unwrapped by anything.
So... let's say I have something like this in the tinymce:
Blah blah blah [popup id=5 text="click me to open the popup this should be inline with this blah blah paragraph"] and then the sentence continues.
The HTML output ends up being:
<p>Blah blah blah </p>
<div id="popup-5" class="popup-modal">click me to open... paragraph</div>
and then the sentence continues.
Was hoping your function would get me output that looked like:
<p>Blah blah blah <div id="popup-5" class="popup-modal">click me to open... paragraph</div> and then the sentence continues.</p>
Any ideas? Thank you!
Wanted to chime in to say 'thank you' for this gist. I was finally fed up with a crappy theme I'm using that aggressively added empty tags every time you hit save on a page. (Going to be moving away from the theme in the future, but gotta get through the next 2 months first). This is/was a life saver.
Adding this jQuery works perfectly fine for me
$('p').each(function() { const $this = $(this); if($this.html().replace(/\s| /g, '').length === 0) $this. Remove(); });
If the p tag is completely empty without space or  , then this should work
$( 'p:empty' ).remove();
Use Jquery : $( 'p:empty' ).remove();