Stripping shortcode from custom excerpt function

I’m using the following function to create a custom excerpt for my homepage and categories pages so I can do it by character count and have a custom “read more”. However, I have captions shortcode showing up in my excerpt.

Example:

Read More

Crispy Vegetable Tacos Do you sometimes feel
overwhelmed when trying to decide what to make for dinner? What I’ve
learned from my years as a family dinner planning expert … continue
reading

I tried adding line 5 to strip out the actual shortcode code but it isn’t working.

Am I on the right track? I’d prefer the shortcodes not to show at all and I’ve used the function I’ve seen on the ‘net but it isn’t working (I’m guessing cause I’m using a custom excerpt function). Anyone want to help me out, please?

function get_excerpt($count){
   $permalink = get_permalink($post->ID);
   $excerpt = get_the_content();
   $excerpt = strip_tags($excerpt);
   $excerpt = str_replace(']]>', ']]>', $excerpt);
   $excerpt = substr($excerpt, 0, $count);
   $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
   $excerpt = $excerpt.' ... <a href="'.$permalink.'" class="read-more">continue reading <i class="foundicon-right-arrow"></i></a>';
   return $excerpt;
}

The fifth line I attempted to convert from this:

$content = str_replace(']]>', ']]>', $content);

TIA!

Related posts

Leave a Reply

2 comments

  1. Don’t use a custom function. You should use the hooks. You don’t have to strip shortcodes, wordpress does that for you automatically, just use something like this

    // setting higher priority so that wordpress default filter have already applied
    add_filter('the_excerpt', 'custom_excerpt_filter', 11);
    function custom_excerpt_filter($excerpt) {
        // apply your logic of read more link here
        return $excerpt . 'Custom Read More Text';
    }
    
    add_filter('excerpt_length', 'custom_excerpt_length');
    function custom_excerpt_length($length) {
        return 30; // replace this with the character count you want
    }
    

    RULE OF THUMB

    Never Ever create a custom function for something there is a hook or core function available

  2. Use strip_shortcodes( $excerpt ) to … well … strip shortcodes. 🙂 Do that early, before you call strip_tags().

    <?php
    /** Plugin Name: (#69848) Strip shortcodes from the excerpt */
    function wpse69848_noshortcode_excerpt( $excerpt )
    {
        return strip_shortcodes( $excerpt );
    }
    add_filter( 'the_excerpt', 'wpse69848_noshortcode_excerpt' );