Disable WordPress automatic formatting on posts using a shortcode

June 22, 2009 at 10:08 am

If you often display code snippets on your WordPress blog, you know how bad WordPress automatic formatting can be. Happilly, with the help from a very cool shortcode you can be able to disable it on a certain portion of text.

The first thing to do is to add the following function to your functions.php file:

function my_formatter($content) {
	$new_content = '';
	$pattern_full = '{(\[raw\].*?\[/raw\])}is';
	$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
	$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

	foreach ($pieces as $piece) {
		if (preg_match($pattern_contents, $piece, $matches)) {
			$new_content .= $matches[1];
		} else {
			$new_content .= wptexturize(wpautop($piece));
		}
	}

	return $new_content;
}
	
remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'my_formatter', 99);

Once done, you can use the [raw] shortcode in your posts:

[raw]Unformatted code[/raw]

If you’re interested in WordPress shortcode, I’ll be publishing a WordPress shortcodes related article on my blog Cats Who Code on thursday. Make sure you grabbed Cats Who Code RSS feed so you’re not going to miss it!

Thanks to TheBinaryPenguin for this awesome shortcode!