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