Skip to content

How To Require A Featured Image In Post Before Publishing In WordPress

Having at least one image in your post in really good for search engine optimization, but it’s hard to get this thing in the mind of your authors and contributors. Here’s a snippet which would require a featured image in post before publishing it to your WordPress. An easy way to ensure all posts have a featured image.

When you try and publish a post without a featured image, you will get following error message:

[alert style=”red”]You must select Featured Image. Your Post is saved but it can not be published.[/alert]

Just drop the following snippet to your current theme’s functions.php file:

add_action('save_post', 'wpds_check_thumbnail');
add_action('admin_notices', 'wpds_thumbnail_error');
function wpds_check_thumbnail($post_id) {
    // change to any custom post type
    if(get_post_type($post_id) != 'post')
    if ( !has_post_thumbnail( $post_id ) ) {
        // set a transient to show the users an admin message
        set_transient( "has_post_thumbnail", "no" );
        // unhook this function so it doesn't loop infinitely
        remove_action('save_post', 'wpds_check_thumbnail');
        // update the post set it to draft
        wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
        add_action('save_post', 'wpds_check_thumbnail');
    } else {
        delete_transient( "has_post_thumbnail" );
function wpds_thumbnail_error()
    // check if the transient is set, and display the error message
    if ( get_transient( "has_post_thumbnail" ) == "no" ) {
        echo "<div id='message' class='error'><p><strong>You must select Featured Image. Your Post is saved but it can not be published.</strong></p></div>";
        delete_transient( "has_post_thumbnail" );