How to display the_post_thumbnail if a post has one or otherwise display the first image in a post?

I would like to create a condition that checks to see if a post has a thumbail and if it does display it, otherwise display the first image in a post.

I tried something like this in my loop.php but it didn’t seem to work:

Read More
<?php if (has_post_thumbnail()) { ?>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(array(640,320)); ?></a>
<?php } else { ?>
<a href="<?php the_permalink(); ?>"><img src="<?php echo catch_that_image(); ?>" /></a>
<?php } ?>

This goes in my functions.php file:

<?php
    function catch_that_image() {
        global $post, $posts;
        $first_img = '';
        ob_start();
        ob_end_clean();
        $output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
        $first_img = $matches [1] [0];

        // no image found display default image instead
        if(empty($first_img)){
             $first_img = get_bloginfo('template_url')."/images/no_image.gif";
        }
            return $first_img;
    }

    $imgURL = catch_that_image();
?>

Related posts

Leave a Reply

2 comments

  1. Get the Image does what you need and better. It’s NOT overwhelming with lots of unnecessary features, and does what it says. Try it to see if it does what you need.

    How does Get the Image plugin pull images?

    • Looks for an image by custom field (one of your choosing).

    • If no image is added by custom field, check for an image using the_post_thumbnail() (WP 2.9’s new image feature).

    • If no image is found, it grabs an image attached to your post.

    • If no image is attached, it can extract an image from your post content (off by default).

    • If no image is found at this point, it will default to an image you set (not set by default).

  2. This should do it, I’m using it and it’s super easy and simple, just paste this into your functions.php:

    function autoset_featured() {
        global $post;
        $already_has_thumb = has_post_thumbnail($post->ID);
        if (!$already_has_thumb) {
            $attached_image = get_children( 
                "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" 
            );
            if ($attached_image) {
                foreach ($attached_image as $attachment_id => $attachment) {
                    set_post_thumbnail($post->ID, $attachment_id);// the size of the thumbnail is defined in a function above
                }
            }
        }
    }  //end function
    
    add_action('the_post', 'autoset_featured');
    add_action('save_post', 'autoset_featured');
    add_action('draft_to_publish', 'autoset_featured');
    add_action('new_to_publish', 'autoset_featured');
    add_action('pending_to_publish', 'autoset_featured');
    add_action('future_to_publish', 'autoset_featured');