I was working on a site that required protected pages in WordPress, and had a few snippets that I thought were worth capturing.
By default WordPress prepends the title of a page or post with “Private:” or “Protected:” if you change the document’s visibility. This is ugly, and I can’t see the point of it. The following snippet, added to your functions.php
, will remove that.
add_filter( 'private_title_format', 'no_private_title_format' );
add_filter( 'protected_title_format', 'no_private_title_format' );
function no_private_title_format( $format ) {
return '%s';
}
The next function creates a custom form. I’m using the Modest theme, this is a modified version of their form. You can get more detail at WP Tuts+
add_filter( 'the_password_form', 'custom_password_form' );
function custom_password_form() {
global $post;
$label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
$action = get_option('siteurl') . '/wp-login.php?action=postpass';
$o = <<<EOT
<div id="et-login">
<div class='et-protected'>
<div class='et-protected-form'>
<form action='$action' method='post'>
<p><label><span>Password: </span><input type='password' name='post_password' id='$label' size='20' /><span class='et_protected_icon et_protected_password'></span></label></p>
<input type='submit' name='submit' value='Login' class='etlogin-button' />
</form>
</div>
</div>
</div>
EOT;
return $o;
}
Finally, don’t forget that the sidebar and custom fields aren’t hidden by password protection. If you don’t want something to show up, wrap it like this (this example is grabbing a field set by Advanced Custom Fields):
<?php
if ( !post_password_required() ) {
echo get_field( 'sidebar' );
}
?>