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');

1 Answer 1


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...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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