Some snippets for password-protected pages in WordPress

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' );
  }
?>