Stripping shortcode from custom excerpt function

by Justice Is Cheap   Last Updated February 11, 2018 18:08 PM

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:

[caption id="attachment_4656" align="aligncenter" width="450"] Crispy Vegetable Tacos[/caption] 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!



Answers 3


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' );
fuxia
fuxia
October 19, 2012 18:35 PM

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

Mridul Aggarwal
Mridul Aggarwal
October 19, 2012 18:55 PM

You can simply use this free plugin named ( Shortcode Cleaner )

https://wordpress.org/plugins/shortcode-cleaner-lite/

It will clean your WordPress content from unused broken shortcodes automatically, from posts, pages, custom post types [ content, excerpt, title, metaboxs ]...etc

mohamdio
mohamdio
February 11, 2018 17:38 PM

Related Questions


Hide disclaimer from summary excerpts

Updated August 08, 2017 16:08 PM

Custom wp_trim_words() function not trimming right

Updated March 21, 2016 08:03 AM

the_excerpt and shortcodes

Updated April 24, 2015 23:03 PM

Get the excerpt length to return attribute

Updated April 29, 2015 21:03 PM

Same excerpt for all posts or portfolio

Updated August 10, 2017 09:08 AM