Password-protecting a WordPress Post/Page hides its Content and Excerpt, but not its Custom Fields: those can still show. Below are ways to hide ’em, and functions for customizing the default WP Password-Protected messages.
Password-protect a Page/Post
Setting the Visibility to Password-protected changes the:
- Title– Adds this string
"Protected: "
, to the output ofget_the_title()
. - Excerpt– Returns this text when we
get_the_excerpt()
: “There is no excerpt because this is a protected post.” - Content– Returns a password form (w/ text) when we
get_the_content()
.
So in places that Post/Page lists its Title & Excerpt (e.g., Index, Category, Search views), we see:
Protected: Post’s or Page’s Title
There is no excerpt because this is a protected post.
And the password-protected single Post/Page itself looks like:
Protected: Post/Page Title
This post is password protected. To view it please enter your password below:
(Custom Field content can still display .)
Hide Custom Fields in a Password-protected Page/Post
This one function: post password required()
, checks both “whether post requires password and correct password has been provided.” So, in single.php
, just wrap a big-ass if
around all your get_post_meta()
s, and CFs shan’t show:
[php]if ( ! post_password_required() ) {
// Code to fetch and print CFs
}[/php]
Change the Password-protected Single Page/Post Text
WP’s logo may be: , but those hard-coded Password messages are anything but poetic. As always, though, WP Hooks us up with the filters to customize that text.
Someone in the support forums asked: How do I change Password Protected text?
Plugin developer Michael Fields answered:
“This piece of code should do it for you. Place this code in your theme’s functions.php file. You can add customizations to the
custom_password_form()
function – just don’t use print or echo – the function must return a value.”
[php htmlscript=”true” highlight=”7″]<?php
add_filter( ‘the_password_form’, ‘custom_password_form’ );
function custom_password_form() {
global $post;
$label = ‘pwbox-‘.( empty( $post->ID ) ? rand() : $post->ID );
$o = ‘<form class="protected-post-form" action="’ . get_option(‘siteurl’) . ‘/wp-pass.php" method="post">
‘ . __( "This post is password protected. To view it please enter your password below:" ) . ‘
<label for="’ . $label . ‘">’ . __( "Password:" ) . ‘ </label><input name="post_password" id="’ . $label . ‘" type="password" size="20" /><input type="submit" name="Submit" value="’ . esc_attr__( "Submit" ) . ‘" />
</form>
‘;
return $o;
}
?>[/php]
Change the Password-protected Excerpt Text
This comment, by J Mehmett in a Justin Tadlock tutorial, show us how to replace the default excerpt text — HTML allowed:
[php htmlscript=”true” highlight=”4″]<?php
function excerpt_protected( $excerpt ) {
if ( post_password_required() )
$excerpt = ‘<em>[This is password-protected.]</em>’;
return $excerpt;
}
add_filter( ‘the_excerpt’, ‘excerpt_protected’ );
?>[/php]
The above goes in your functions.php
file. Put your password-protected excerpt-text where mine sez: [This is password-protected.]
.
Put the Password-protected Form in the Excerpt
Lastly, JT’s tut also shows us how to “Show the post password form for excerpts” by calling the core function get_the_password_form()
.
Now go protect some Posts with personally preferable replacement prose.