How can i remove the paragraph from shortcodes content?

If you have created shortcodes in WordPress, you may have noticed that when you get the content of your shortcode, it’s wrapped in html paragraph tags.

I don’t know why the progammers did that. It seems like a very bad idea to me to add formatting to the actual content.

Read More

I’ve found a post that presents this solution :

http://donalmacarthur.com/articles/cleaning-up-wordpress-shortcode-formatting/

But i’m wondering : Is there a solution proposed by the wordpress API itself, or something that i am missing here ?

Related posts

Leave a Reply

3 comments

  1. The shortcodes, since they are inserted in the editor, comply to editor rules. Hitting the return in editor will generate a paragraph tag, just like any other text. It’s one of the TinyMCE features. To read more about TinyMCE check out their forum and especially this thread

  2. The link in you’re question is now extinct, so I’m not sure of the solution it suggested, but here’s another solution for posterity:

    Add the following to functions.php to run the formatting after shortcodes are evaluated:

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

    The author notes that you’ll need to explicitly enable formatting within plugins that require it:

    function my_shortcode($atts) {
        $content = wpautop(trim($content));
        [snip]
    
  3. Simple solution which worked for me is to just remove paragraph end “</p>” from the beginning of the $content, and paragraph begin “<p>” from the end of the $content.

    For example with regex like:

    function fix_paragraphs($content)
    {
        $patterns = array('/^</p>/i', '/<p>$/i');
        return preg_replace($patterns, '', $content);
    }
    

    Or if you’re sure they’ll be there, you could just trim them like this:

    return substr($content, 4, -3);