【WordPressのパスワード保護の範囲を追加する】カスタムフィールドもパスワード保護できます

WordPressのカスタマイズをちょっとやっているのですが、お客様にお見せする時に、テスト環境を作って出来栄えを確認してもらうことってあると思います。WordPressでは、投稿やページを個別にパスワード保護をして、特定の方にのみ閲覧をさせる方法があります。

投稿やページ個別でパスワード保護ができる

パスワード保護を使えば「post_content()」、「comments_template()」で出力された情報のみパスワード保護されるようです。

なので、ヘッダー、フッター、サイドバーなどはパスワード保護されずに、だれても閲覧できてしまうんですね。まあ、それはよしとしても、例えば、カスタムフィールドを投稿ごとに設定している場合があるとしましょう。カスタムフィールドもパスワード保護されずに表示されてしまうんですね。

本文の注釈的に使っている場合は、本文に含めてパスワード保護したいですよね。今回は、そのやり方を紹介します。実は特定の方にのみ表示を許可させるプラグインというものも、あるにはあるんですが、コードが書ける方は、これから紹介する方法のほうがラクだと思います。

下記のフォーラムを参考にしました。

[解決済み] パスワードで保護された記事のカスタムフィールド表示 (5 件の投稿)

こちらのフォーラムでの回答がとてもわかりやすいので、引用を交えながらご説明させていただきますね。

パスワードで保護されるのは本文 (post_content) だけのようですね。

カスタムフィールド値なども保護したい場合には、注意が必要そうです。

「comments_template();」も確か保護されるはず。(試したら保護されました)

まあ、とりあえず保護される範囲は限定されているということです。

post_password_required() が false を返す (=パスワードが必要ない) 場合に

echo するようコードを記述すれば OK のはずです。

うんうん、post_password_required()を使えば出来るようですね。

<?php if ( !post_password_required( $post->ID ) ) : ?> <?php echo get_post_meta( $post->ID, 'key', true ); ?> <?php endif; ?>

上記のように、コードも掲載されていました。

これはカスタムフィールドのフィールド名「key」の値をパスワードで保護しています。

つまり、投稿のパスワード保護範囲を追加する場合は、

<?php
 if( !post_password_required( $post->ID ) ) :
 //ここにパスワード保護したいものを追加する
 endif;
?>

この方法でいけます。とてもカンタンですね。ちなみに英語にお強い方は、こちらのサイトでパスワード保護についてもっと詳しく書いてあります。理解を深めたい方はどうぞ~。

Password Protect More Than the_content() | Digging into WordPress

WordPressのパスワード保護の範囲を知りたい、パスワード保護の範囲を追加したい、という情報をお探しの方にご参考いただければ幸いです。

著者:bouya Imamura