How to return a 410 code for previously published posts now set to draft?

I'd like to return a 410 code for posts (of custom type news) which have previously been published (and therefore have a url indexed by search engines), but have now had the post status set to draft.

Here's my attempt:

function news_gone() {
    global $post;
    if ( is_singular( 'news' )  get_post_status($post-id) == draft  ) {
        global $wp_query;
        $wp_query-set_404();
        status_header(410);
    }
}
add_action( 'template_redirect', 'news_gone' );

This, however, has no effect - is template_redirect the correct hook, or is there a better approach?

Topic post-status redirect Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.