Skip to content

Instantly share code, notes, and snippets.

@ninnypants
Last active January 3, 2023 01:11
Show Gist options
  • Star 64 You must be signed in to star a gist
  • Fork 22 You must be signed in to fork a gist
  • Save ninnypants/1668216 to your computer and use it in GitHub Desktop.
Save ninnypants/1668216 to your computer and use it in GitHub Desktop.
Remove empty p tags from WordPress posts
<?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|&nbsp;)*+(<br\s*/*>)*(\s|&nbsp;)*</p>#i', '', $content);
}
@justiceakorede
Copy link

justiceakorede commented Nov 18, 2022

Adding this jQuery works perfectly fine for me

$('p').each(function() { const $this = $(this); if($this.html().replace(/\s|&nbsp;/g, '').length === 0) $this. Remove(); });

If the p tag is completely empty without space or &nbsp, then this should work
$( 'p:empty' ).remove();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment