I coded a wordpress shortcode for columns that basically inserts html via a shortcode. Problem is that wpautop adds stray p elements that renders the code invalid.
To test put this into your functions.php:
function static_col_container($atts, $content) {
extract(shortcode_atts(array(
'foo' => 'bar'
), $atts));
$content = do_shortcode($content);
$container="<div class="static-column-container">" . $content . '</div>';
return $container;
}
add_shortcode('static-cont', 'static_col_container');
function static_col($atts, $content) {
extract(shortcode_atts(array(
'space' => '2',
'class' => ''
), $atts));
$content = do_shortcode($content);
$column_container="<div class="static-column static-column-" . $space . ' ' . $class . '">' . $content . '</div>';
return $column_container;
}
add_shortcode('static-col', 'static_col');
Usage is:
[static-cont]
[static-col]
put some content here...
[/static-col]
[static-col]
put some content here...
[/static-col]
[/static-cont]
I know that WordPress uses wpautop to insert p tags which can be disabled via:
remove_filter('the_content', 'wpautop');
Problem is that now you have to enter every single p element yourself, which is a pain and makes the visual editor useless. Has anybody found a better solution?
3 Answers
Remove the filter from the the_content and run it after the shortcode are processed.
Try:
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);
Usually shortcodes are processed after wpautop is applied to the content. See http://core.trac.wordpress.org/browser/tags/3.1/wp-includes/shortcodes.php#L296