How to Automatically Set the Featured Image in WordPress

Do you sometimes forget to set the featured image on your WordPress posts? Here’s a quick handy snippet that will automatically set the featured image by grabbing the first image of the post. If you want to select your own featured image, it will display your selection instead.

Add this snippet to your theme’s functions.php file or create your own little plugin for it, whichever you prefer:

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

This snippet comes to you courtesy of the folks at wp-snippet.com. Add the code to your site and never forget to set your featured image again.

Comments (3)

  1. Hello

    Use ‘transition_post_status’ to avoid multi lines of repeting codes, and do not forget that i can add my own statuses. Kind of :
    function autoset_featured( $new_status, $old_status, $post ) {
    if( $new_status != ‘publish’ ) return;
    $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);
    }
    }
    }
    }
    add_action( ‘transition_post_status’, ‘autoset_featured’, 10, 3 );
    Also, do not use “global post”, you already have “$post” in the 1st paramater.

    See you !

Participate