the_excerpt and shortcodes

I’m using the_excerpt on my index page. I’m also using a dropcap shortcode at the beginning of each of my posts. On the index page, the posts will not display the letter with the dropcap shortcode around it. If my post beings with the word “Dog” the index page displays “og”. How do I get shortcodes to work when using the_excerpt?

Shortcode

function drcap ($atts, $content = null) {
    return '<div class="dropcap">' . do_shortcode($content) . '</div>';
}

add_shortcode('dropcap', 'drcap');

Related posts

Leave a Reply

4 comments

  1. Paste this in your theme’s functions.php file

    add_filter( 'the_excerpt', 'shortcode_unautop');
    add_filter( 'the_excerpt', 'do_shortcode');
    
  2. In the auto-generated excerpt shortcodes will be removed by WordPress:

    An auto-generated excerpt will also have all shortcodes and tags
    removed. It is trimmed down to a word-boundary and the default length
    is 55 words.

    Anyhow, if you use the manual excerpt field for your post, it works.

  3. Here’s a solution for including shortcode output within WordPress’s auto-generated excerpts:

    add_filter('the_excerpt', 'do_shortcode');
    remove_filter('get_the_excerpt', 'wp_trim_excerpt', 10);
    add_filter('get_the_excerpt', 'my_custom_wp_trim_excerpt', 99, 1);
    function my_custom_wp_trim_excerpt($text) {
        if(''==$text) {
            $text= preg_replace('/s/', ' ', wp_strip_all_tags(get_the_content('')));
            $text= explode(' ', $text, 56);
            array_pop($text);
            $text= implode(' ', $text);
        }
        return $text;
    }
    

    This implementation assumes a word-length of 55.

    Hope it helps someone.

  4. Also, add these 2 lines to your functions.php file for complete and comprehensive results:

    add_filter('get_the_excerpt', 'shortcode_unautop');
    add_filter('get_the_excerpt', 'do_shortcode');