Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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'); 

[box]something[/box]

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:

[box]<h1>Header</h1><div>Content</div>[/box]

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 (...)

[edit]

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? ;/

share|improve this question
    
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
add comment

3 Answers

up vote 2 down vote accepted

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

elements

share|improve this answer
    
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
    
Thanks a lot :-) ! –  keatch Sep 11 '12 at 21:19
add comment

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/

share|improve this answer
add comment

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!

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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