20.Oct.09 Fix for the dredded Wordpress paragraph spacing problem!
This article discusses a fix for Wordpress, a software that this websites uses to manage its content. Really, this is only pertinent to website administrators specifically using Wordpress. Otherwise you might just want to skip it.
So while making little changes to the LFO website code in Wordpress, something suddenly happened… The line breaks between paragraphs in blog posts and site pages all just disappeared right out of the blue. I was dumbfounded! Upon investigating all the changes to the website code I had made, I was completely unable to figure out what had happened.
I searched the web for the problem and found it was a common issue among Wordpress users (which blows my mind because I feel that WP is nearly infallible). Some people were able to add tags in the blank space between paragraphs in the HTML post editor to fix the problem. It worked for me too but I didn’t really want to have to do that to over 100 different posts and pages. That would suck.
A little research showed me that there is a function in Wordpress located in /wp-includes/formatting.php that is responsible for auto-inserting <p> tags in place of line breaks on pages and posts. So I simply added tags after every </p> tag in the replace strings of this function and sure enough, it worked!
I cannot guarantee that it is a sound method to use for this problem but it did work for me so I wanted to share the fix with you.
In the latest version of Wordpress, open this file /wp-includes/formatting.php and find the function wpautop and replace the entire function with this code:
function wpautop($pee, $br = 1) {
if ( trim($pee) === ” )
return ”;
$pee = $pee . “\n”; // just to make things a little easier, pad the end
$pee = preg_replace(’|<br />\s*<br />|’, “\n\n”, $pee);
// Space things out a little$allblocks = ‘(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|
dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)’;
$pee = preg_replace(’!(<’ . $allblocks . ‘[^>]*>)!’, “\n$1″, $pee);
$pee = preg_replace(’!(</’ . $allblocks . ‘>)!’, “$1\n\n”, $pee);
$pee = str_replace(array(”\r\n”, “\r”), “\n”, $pee); // cross-platform newlines
if ( strpos($pee, ‘<object’) !== false ) {
$pee = preg_replace(’|\s*<param([^>]*)>\s*|’, “<param$1>”, $pee); // no pee inside object/embed
$pee = preg_replace(’|\s*</embed>\s*|’, ‘</embed>’, $pee);
}
$pee = preg_replace(”/\n\n+/”, “\n\n”, $pee); // take care of duplicates
// make paragraphs, including one at the end
$pees = preg_split(’/\n\s*\n/’, $pee, -1, PREG_SPLIT_NO_EMPTY);
$pee = ”;
foreach ( $pees as $tinkle )
$pee .= ‘<p>’ . trim($tinkle, “\n”) . “</p> \n”;
$pee = preg_replace(’|<p>\s*</p> |’, ”, $pee); // under certain strange conditions it could create a P of entirely whitespace
$pee = preg_replace(’!<p>([^<]+)</(div|address|form)>!’, “<p>$1</p> </$2>”, $pee);
$pee = preg_replace(’!<p>\s*(</?’ . $allblocks . ‘[^>]*>)\s*</p> !’, “$1″, $pee); // don’t pee all over a tag
$pee = preg_replace(”|<p>(<li.+?)</p> |”, “$1″, $pee); // problem with nested lists
$pee = preg_replace(’|<p><blockquote([^>]*)>|i’, “<blockquote$1><p>”, $pee);
$pee = str_replace(’</blockquote></p> ’, ‘</p> </blockquote>’, $pee);
$pee = preg_replace(’!<p>\s*(</?’ . $allblocks . ‘[^>]*>)!’, “$1″, $pee);
$pee = preg_replace(’!(</?’ . $allblocks . ‘[^>]*>)\s*</p> !’, “$1″, $pee);
if ($br) {
$pee = preg_replace_callback(’/<(script|style).*?<\/\\1>/s’, create_function(’$matches’, ‘return str_replace(”\n”, “<WPPreserveNewline />”, $matches[0]);’), $pee);
$pee = preg_replace(’|(?<!<br />)\s*\n|’, “<br />\n”, $pee); // optionally make line breaks
$pee = str_replace(’<WPPreserveNewline />’, “\n”, $pee);
}
$pee = preg_replace(’!(</?’ . $allblocks . ‘[^>]*>)\s*<br />!’, “$1″, $pee);
$pee = preg_replace(’!<br />(\s*</?(?:p|li|div|dl|dd|
dt|th|pre|td|ul|ol)[^>]*>)!’, ‘$1′, $pee);
if (strpos($pee, ‘<pre’) !== false)
$pee = preg_replace_callback(’!(<pre[^>]*>)(.*?)</pre>!is’, ‘clean_pre’, $pee );
$pee = preg_replace( “|\n</p> $|”, ‘</p> ’, $pee );
$pee = preg_replace(’/<p> \s*?(’ . get_shortcode_regex() . ‘)\s*<\/p> /s’, ‘$1′, $pee); // don’t auto-p wrap shortcodes that stand alonereturn $pee;
}
Before making any changes described here to your website in any way, PLEASE make a backup of the file you are editing. I cannot be held liable if there is a problem with your website because you tried this fix.


