Here's my very simple shortcode:

function box_shortcode( $atts, $content = null ) {
        extract( shortcode_atts( array(
            'width' => 'auto',
            'height' => 'auto', 
            ), $atts ) );  

       return '<div class="boxy-box" style="width:'. $width .'; height:'. $height .';" >'.do_shortcode($content).'</div>';

    add_shortcode('box', 'box_shortcode'); 


should give:

<div class="boxy-box" width:auto; height:auto;>something</div>

But, it doesn't. Even an empty shortcode (without a content, eg. [box][/box]) gives:

<div class="boxy-box" width:auto; height:auto;><br/></div>

(I don't care, but don't know where the br comes from)

The main problem is that, when I try [box]something[/box] I'm getting:

<div class="boxy-box" width:auto; height:auto;><br/>something<br/></div>

I know WP editor formats text automatically and there are "noP" plugins out there, but firstly - I'm using the HTML editor, secondly, why the heck WP is adding Brs (sometimes p's) to an inline code? :O

It wouldn't be a huge problem, but I HAVE to get PURE output, so:


Will give a header and a div inside my box div, without any parapgrahs, brs, spans etc.

The funny thing is I have the same shortcode with h2 instead of div and it doesn't give any brs etc.

Sometimes I'm also getting a <div class="boxy-box" width:auto; height:auto;></p>$content (...)


I've found some comments on it:

This is driving me nuts as well. What the f**k is the point of having a html/code mode for posting if wordpress filters the god damn code and wraps around the tags anyways?

So I guess that's the problem. Is there a way of turning autop functionality at least for HTML editor? ;/

  • Is there a particular reason you call do_shortcode inside the shortcode function, are you expecting other shortcodes inside your own? If not, i'd suggest testing minus the do_shortcode call. – t31os Mar 7 '11 at 14:30

You can postpone the wp_autop filter. Wordpress has this filter enabled by default. And it is processing before the shortcode output.

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);

Add this to your functions.php and check if the problem persist!

See a similar problem here: stray <p> elements

  • actually I did that, but I believe it won't create ps while writing posts anymore? :( – Wordpressor Mar 7 '11 at 13:15
  • 1
    ok, got it. +30 points for You! – Wordpressor Mar 7 '11 at 15:18
  • I'm not sure if you're still here, but I have some wpautop trouble :) Here: wordpress.stackexchange.com/questions/15137/formatting-code – Wordpressor Apr 19 '11 at 21:25
  • 1
    I have seen a few "solutions" to this problem on SE and other places, and none of them have worked until I found yours. I wish I could +100 this answer and bitchslap the authors of the other answers. – Lèse majesté Sep 11 '12 at 18:45

I had the same problem and checked the $content in the add_filter() function. There you can see what happen with the shortcodes. I ended up with an easy plugin, that removes p and br tags on shortcodes: http://www.johannheyne.de/wordpress/shortcode-empty-paragraph-fix/


I tried this:

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);

The filter works but messes up Contact Form 7

I tried the plugin code and it worked perfect!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.