I have made my own theme with shortcodes to WordPress.

In my filters I have:

remove_filter('the_content', 'wpautop');
add_filter('the_content', 'wpautop', 99);
add_filter('the_content', 'shortcode_unautop', 100);

This should remove paragraph tags around and in my shortcodes.

My shortcode output (partial of the entire code):

$output .= '
    <div ' . implode(' ', $html_attributes) . '>
        <a href="' . get_permalink() . '">
            <div ' . implode(' ', $html_attributes_inner) . '>
                ' . $logo . '

                <div class="button hidden-xs hidden-sm">Læs case</div>

                <div class="content">
                    <div class="row">
                        <div class="col-md-8">
                            <h4 class="title">' . get_the_title() . '</h4>

                            <div class="spacer small"></div>

                            <div class="excerpt">' . get_post()->post_excerpt . '</div>
                        </div>
                    </div>
                </div>

            </div>
        </a>
    </div>
';

// Script newlines whitespace, tabs etc.  
return str_replace(["\r", "\n", "\t"], '', '<div class="row cases">' . $output . '</div>');

This produces:

<div class="row cases">
<div class="col-xs-12"><a href="http://dev.youfront-hosting.dk/case/nori">
<div class="case" style="background-image: url(https://dev.youfront-hosting.dk/content/uploads/nori-restaurant-1120x500.jpg)">
<div class="button hidden-xs hidden-sm">Læs case</div>
<div class="content">
<div class="row">
<div class="col-md-8">
<h4 class="title">Nori</h4>
<div class="spacer small"></div>
<div class="excerpt"></div>
</div>
</div>
</div>
</div>
<p></a></div>
<div class="col-xs-12 col-md-6"><a href="http://dev.youfront-hosting.dk/case/an-ivy">
<div class="case" style="background-image: url(https://dev.youfront-hosting.dk/content/uploads/anivy-founders-545x500.jpg)"><img src="https://dev.youfront-hosting.dk/content/uploads/anivy-logo.png" alt="">
<div class="button hidden-xs hidden-sm">Læs case</div>
<div class="content">
<div class="row">
<div class="col-md-8">
<h4 class="title">AN-IVY. Nyt gentleman brand med stor passion for fashion, og klassisk herretøj</h4>
<div class="spacer small"></div>
<div class="excerpt">AN-IVY er et brand startet i 2013. De designer herrekollektioner der er inspireret af Ivy Leagues tradioner og moderne fashion. De har en stor passion for mode og klassisk herretøj.</div>
</div>
</div>
</div>
</div>
<p></a></div>
<div class="col-xs-12 col-md-6"><a href="http://dev.youfront-hosting.dk/case/powderstore">
<div class="case" style="background-image: url(https://dev.youfront-hosting.dk/content/uploads/team-youfront-545x500.jpg)">
<div class="button hidden-xs hidden-sm">Læs case</div>
<div class="content">
<div class="row">
<div class="col-md-8">
<h4 class="title">Powderstore</h4>
<div class="spacer small"></div>
<div class="excerpt"></div>
</div>
</div>
</div>
</div>
<p></a></div>
</div>
</div>

Note the additional <p> tags at line 15, 29 and 43.
The paragraph tags disappear if I remove the anchor tag in my shortcode, but that’s not a solution I can use.

3 Answers
3

The above solution doesn’t work if you’re using Advanced Custom Fields. When using ACF, the following code does work:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'acf_the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'acf_the_content', 'wpautop' , 100);
add_filter( 'the_content', 'shortcode_unautop',110 );
add_filter( 'acf_the_content', 'shortcode_unautop',111 );

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *