既に公開中のサイトでも、サンプルページを作成して社内にだけオープンにしたい場合、サイト全体でなく、個別のページだけパスワード保護機能を使用することは多いかもしれません。
投稿ページや固定ページの編集画面で、公開状態を簡単に「公開」「非公開」「パスワード保護」を選択して設定できます。
非公開設定(WordPressにログインした状態のときだけコンテンツが閲覧できる)でもよいのですが、ユーザー以外の方に共有する場合でしたら、わざわざWordPressのログイン情報まで伝えなくても、パスワード保護のほうが手軽ですよね。
ということで、あるサイトでさらっとパスワード保護設定にしてみたのですが、アクセスし直してみても丸見え。タイトルに「Protected:」とついているものの、記事全部丸見えでした。
使用していたテーマは「_S(アンダースコア)」で子テーマを作成して、プラグイン「カスタムフィールドテンプレート」を使用して何種類かテンプレート作成していて選択したテンプレートによってsingle.phpの中で条件分岐させていたんですが、それがよくなかったぽいです。
とりあえず、single.phpの最初のループ部分にこちらを追記したら無事パスワード保護できました。
<?php while( have_posts() ) : the_post(); //ここは通常のループ if( post_password_required($post->ID) ) { //パスワード保護されている場合 echo get_the_password_form($post->ID); //パスワード入力フォームを出力 }else{ the_content(); } //そうじゃなければコンテンツ表示 ?>
参考URL:WordPress 個別記事に対する「パスワード保護」を利用する関数
とっても助かりました。
で、_Sだとパスワードフォームのテキストが全部英語になってしまうので、functions.phpでテキストも変更しました。
//パスワード保護ページの文章 function my_password_form() { return '<p>このページのコンテンツはパスワードで保護されています。</p> <form class="post_password" action="' . home_url() . '/wp-login.php?action=postpass" method="post"> <input name="post_password" type="password" size="24" /> <input type="submit" name="Submit" value="' . esc_attr__("送信") . '" /> </form>'; } add_filter('the_password_form', 'my_password_form');
これですっきり解決しました。
心置きなくパスワード保護ができますね。
WordPressって万能だなあ。