WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is it possible to adjust the excerpt so it will show text or one image or one video?

The following codes makes it possible to show all of the above, but i'd really like to limit that, dependent of whats included in the post..

function improved_trim_excerpt($text) {
        global $post;
        if ( '' == $text ) {
                $text = get_the_content('');
                $text = apply_filters('the_content', $text);
                $text = str_replace('\]\]\>', ']]&gt;', $text);
                $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
                $text = strip_tags($text, '<iframe>, <p>, <img>');
                $excerpt_length = 66;
                $words = explode(' ', $text, $excerpt_length + 1);
                if (count($words)> $excerpt_length) {
                        array_push($words, '[...]');
                        $text = implode(' ', $words);
        return $text;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');
share|improve this question
up vote 3 down vote accepted

I would encourage you to consider using post formats. You can see my answer to a similar question about altering the "Read More" text, but it would apply similarly to you. For the video portion, you might want to create a custom field to hold the video URL, but otherwise, I imagine this would be quite simple to setup.

Rather than filtering the excerpt, this would also give you the option to replace the_excerpt() with:

get_template_part( 'excerpt', get_post_format() );

Then you could use excerpt.php for the default/fallback snippet, excerpt-video.php for videos, and excerpt-image.php for images. Alternately, you'd use something like this in your filter to test the post format:

if( get_post_format() == 'video' ) { // etc...
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.