Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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');
?>
share|improve this question
add comment

1 Answer 1

up vote 2 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
add comment

Your Answer

 
discard

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.