【WordPress】パスワード保護ページをカスタマイズ!カスタムフィールドでテキスト変更できるようにしたりする

記事や固定ページにパスワードをかけたい時に便利な、パスワード保護機能ですが、 タイトルに強制的に「保護中」と出てしまったり、テキストを自由に変えられなかったり…といろいろと不便な点があります。

そんな部分をカスタマイズして、もっと便利にパスワード保護を使えるようにしましょう!
突然ですが新サービスのおしらせです ちびキャラ おまちしてます!

今回はすでにパスワード保護はできているけど、直したい部分がある!というところからです。
前回の記事:【WordPress】プラグイン不要!記事をパスワード保護して閲覧制限する方法

タイトルから「保護中:」の表示を消す

tetblo_131111_01
タイトルに勝手に表示されてしまう「保護中:」という文字列を消すには、functions.phpに次のコードを書き加えましょう。
add_filter('protected_title_format', 'remove_protected');
function remove_protected($title) {
       return '%s';
}
WordPress – 保護ページタイトルから「保護中」を削除
ファイルの場所は、「wp-content」→「themes」→現在使っているテーマの中の「functions.php」です。
「?>」より内側に書けばどこでもOK。一番最後あたりに貼り付けておきましょう。

パスワード保護ページのテキストを変更する

tetblo_131111_02
それでは次に、入力フォームの上のテキストを書き換えましょう。
「保護中」を削除したのと同じように、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]パスワード付き投稿の入力画面をオリジナルにする方法が、いつの間にか変わってたので直した
formタグの中は、パスワード入力に必要な部分ですので、間違えて消したりしないように気をつけましょう。
他の部分は、好きなテキストやhtmlを書いて下さいね。

さて、これでパスワード入力画面に、書いたテキストが表示されたはずです!
tetblo_131111_0202 1ページだけパスワード保護する場合や、毎回同じテキストを表示する場合はこれでOK。

しかしサイトによっては、ページ毎に違う説明文を書きたい!ということもあるのではないでしょうか。 そんな時は次のやり方でやってみましょう。

パスワード保護ページのテキストをページ毎に変えられるようにする

functions.phpに直接テキストを書く方法はお手軽ですが、後で文章を変えたくなった時、いちいちテーマを編集しなくていはいけないのが難点です。
テキストをちょくちょく変える場合や、ページ毎に異なる文章にしたい場合は、カスタムフィールドを使って対応しましょう!

まず、function.phpに以下のコードを記述して下さい。
function my_password_form() {
  $passwordForm = '<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>';
  return post_custom("パスワード入力画面") . $passwordForm;
}
add_filter('the_password_form', 'my_password_form');
先程の書き方と違うのは、パスワード入力画面に表示したいテキストを直接書かずに、 「パスワード入力画面」という名前をつけたカスタムフィールドの値を出力するようにしたところ。
これを書いただけでは、まだ入力フォームしか表示されません。

では次に管理画面で、パスワード保護設定をした投稿(または固定ページ)の編集画面を開きましょう。
管理画面右上の「表示オプション」を開いて、「カスタムフィールド」にチェックを入れます。 チェックをいれると本文入力エリアの下あたりに、にょろっとカスタムフィールドの入力欄が出るはず。 tetblo_131111_0301
まず、名前欄に、「パスワード入力画面」と入力します。
そして値欄に、パスワード入力画面に表示したいテキストを入力します。
tetblo_131111_0302
ちなみにhtmlも記述できますので、色をつけたり、画像を表示したりすることもできます!
イラストを添えたりしながら、いい感じにカスタマイズしましょう。
tetblo_131111_0303

Cookieの期限を変える

最後に、Cookieの有効期限を変更します。
このパスワード保護はデフォルトでは、パスワードのCookie保存期限が10日になっています。
つまり、一度パスワード入力すると、10日間はパスワード入力なしで記事が見れてしまうのです。

内容にもよりますが、学校や職場などの共有パソコンで閲覧される可能性もありますので、 もう少し短くしておいたほうが安心ではないかと思います。

というわけで、おなじみのfunctions.phpに以下のコードを書きましょう。
function custom_postpass_time() {
    require_once ABSPATH . 'wp-includes/class-phpass.php';
    $hasher = new PasswordHash( 8, true );
    setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), time() + HOUR_IN_SECONDS, COOKIEPATH );
    wp_safe_redirect( wp_get_referer() );
    exit();
}
add_action( 'login_form_postpass', 'custom_postpass_time' );
このコードを書くと、Cookieの有効期限が1時間になります。
何時間もサイトを見ているという状況もあまりないと思いますので、これくらいがちょうど良いかなーと思います。

有効期限を変えたい場合は、上記のコードのなかの「HOUR_IN_SECONDS」を、任意の数字、文字列に変更しましょう。

1分間
MINUTE_IN_SECONDS
30分間
30 * MINUTE_IN_SECONDS
1時間
HOUR_IN_SECONDS
12時間
12 * HOUR_IN_SECONDS
1日
DAY_IN_SECONDS
3日
3 * DAY_IN_SECONDS
wordpressのパスワード保護で、保持期限をfunctions.phpとアクションフックで変更する
週や年もありますが、あんまり使わなさそうなので、今回は省略します。

というわけで大体思い通りになったのではないでしょうか。
それでは、パスワード保護機能を便利に使い倒してくださいね!