Hide pages from google and visitors

Add a simple checkbox to the post editor to toggle the generation of a meta field that disallows search engines to index your content. Then hook into wp_head, check for the setting and print that field.

Sample code for a plugin:

add_action( 'post_submitbox_misc_actions', 'show_noindex_checkbox' );
add_action( 'save_post', 'save_noindex', 10, 2 );
add_action( 'wp_head', 'insert_noindex_meta' );

function show_noindex_checkbox()
{
    $post_id = get_the_ID();

    $name="noindex";
    $id      = $name . '_id';
    $value   = esc_attr( get_post_meta( $post_id, '_noindex', TRUE ) );
    $checked = checked( $value, 1, FALSE );
    $label="Disallow search engine indexing";
    $nonce   = wp_nonce_field( '_noindex', '_noindex_nonce', TRUE, FALSE );

    print <<<EOD
<div class="misc-pub-section">
    <label for="$id">
        <input type="checkbox" $checked id="$id" name="$name" value="1" />
        $nonce
        $label
    </label>
</div>
EOD;
}

function save_noindex( $post_id, $post )
{
    if ( wp_is_post_autosave( $post ) )
        return;

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;

    if ( ! isset ( $_POST[ '_noindex_nonce' ] ) )
        return;

    if ( ! wp_verify_nonce( $_POST[ '_noindex_nonce' ], '_noindex' ) )
        return;

    if ( ! isset ( $_POST[ 'noindex' ] ) )
        return delete_post_meta( $post_id, '_noindex' );

    if ( 1 != $_POST[ 'noindex' ] )
        return;

    update_post_meta( $post_id, '_noindex', 1 );
}

function insert_noindex_meta()
{
    if ( is_singular() and '1' !== get_post_meta( get_the_ID(), '_noindex', TRUE ) )
        wp_no_robots();
}

Leave a Comment