Prevent publishing the post before setting a featured image?

As the title says , I want a plugin/function to prevent/inform the user when he tries to publish the post without setting the featured image.

ANY HELP ???

Related posts

Leave a Reply

2 comments

  1. The has_post_thumbnail() works for me, in WP versions 3.4.1 and other most recently.
    But in this logic, because the WP will publish the post even with exit or wp_die() or anything to terminate the PHP script. For prevent that the post stay with published status, you will need to update the post before terminate. Look the code below:

    add_action('save_post', 'prevent_post_publishing', -1);
    function prevent_post_publishing($post_id)
    {
        $post = get_post($post_id);
    
        // You also add a post type verification here,
        // like $post->post_type == 'your_custom_post_type'
        if($post->post_status == 'publish' && !has_post_thumbnail($post_id)) {
            $post->post_status = 'draft';
            wp_update_post($post);
    
            $message = '<p>Please, add a thumbnail!</p>'
                     . '<p><a href="' . admin_url('post.php?post=' . $post_id . '&action=edit') . '">Go back and edit the post</a></p>';
            wp_die($message, 'Error - Missing thumbnail!');
        }               
    }
    
  2. <?php
    // Something like that should help, but you'll have to play with it to get it working:
    // inside your functions.php file
    function wpse16372_prevent_publish()
    {
        if ( ! is_admin() )
            return;
    
        // This should be ok, but should be tested:
        $post_id = $GLOBALS['post']->ID;
        echo '<pre>Test for post ID: '; print_r( $post_id ); echo '</pre>';// the actual test
    
        // has_post_thumbnail() doesn't work/exist on/for admin screens (see your error msg). You need to find another way to test if the post has a thumbnail. Maybe some Javascript?
        //if ( ! has_post_thumbnail( $post_id );
        if ( ! has_post_thumbnail( $post_id ) )
        {
            ?>
            <!-- // 
            <script language="javascript" type="text/javascript">
                alert( 'you have to use a featured image' );
            </script>
            // -->
            <?php
            exit; // abort
        }
    }
    add_action( 'save_post', 'wpse16372_prevent_publish', 100 );
    ?>