The excerpt: Display text OR image OR video

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

<?php 
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_pop($words);
                        array_push($words, '[...]');
                        $text = implode(' ', $words);
                }
        }
        return $text;
}
?>
<?php
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');
?>

Related posts

Leave a Reply

1 comment

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