WordPressでは記事を公開する際に、公開状態をパスワード保護に設定すると、パスワードを知っている人のみが閲覧できるようにすることができます。しかし、保護ページはタイトルに「保護中」と表示され不格好だったり、テキストの変更ができないなど不便な点があります。そこで今回は、そんな保護ページ部分をカスタマイズし、自由にテキストなどを変えれる方法を紹介いたします。

投稿記事をパスワード保護にする方法

まずはおさらいも兼ねて投稿記事を保護する方法について解説します。

「投稿ページ」⇒「新規投稿」より記事を作成します。通常であればすぐに「公開」ボタンを押す所ですが、パスワード保護をかけるには、「公開状態」の編集を選択ください。すると下記の画像のようなパスワード入力画面が表示されますので、設定し、公開します。これでパスワードがかかった記事ができます。

pass

保護ページをカスタマイズする方法

パスワードをかけた投稿記事を確認すると、下図のように表示されます。
pass02

パスワード保護した記事は図のように、タイトル前に「保護中:」の文言が追加され、「このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。」という文章の下にパスワード入力欄が表示されます。このままの状態でも、このページが閲覧するためにパスワードが必要な記事だということはわかります。

ただし、もう少しわかりやすくしたい場合や文章を任意のものに変更したいという場合は、functions.phpを編集することカスタマイズすることができます。

functions.phpは記述を間違えるなどのエラーを起こすと画面が真っ白になり、修復には時間がかかります。カスタマイズの際には必ずバックアップをとってから操作ください。また、テーマのカスタマイズで起きた問題に関しましては、サポート対象外となってしまいますのでご了承ください。

保護中の文言を削除する方法

「保護中:」という文字列を消すには、functions.phpに次のコードを書き加えてください。functions.phpの場所は、TCDのテーマファイルであれば、「public_html/wp-content/themes/テーマ名」にあるはずです。基本的にはfunctions.phpの一番最後に貼付けるのがおすすめです。

add_filter('protected_title_format', 'remove_protected');
function remove_protected($title) {
       return '%s';
}

このように保護中が表示されなくなりました。
pass03

参考記事:WordPress – 保護ページタイトルから「保護中」を削除 | technolog.jp

テキストを変更する方法

続いて、「このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。」というテキストを編集していきます。先ほどの保護中と同様に下記のコードを追加してください。

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

このようにテキストの表示が変更になりました。formタグ内は送信に重要な項目なので誤って変更しないように注意ください。
pass04

Cookieの期限を変える

最後に、Cookieの有効期限を変更方法を解説します。このパスワード保護機能はデフォルト設定では、パスワードのCookie保存期限が10日に設定されています。そのため、一度パスワード入力すると、10日間はパスワードの入力がなくても記事が表示されてしまいます。そこで最後にこのCookie保存期限を短くする方法を説明します。

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

今回の設定では、1時間に設定していますが、時間を変更する場合は、「HOUR_IN_SECONDS」の部分を、10分であれば「600」など、秒数を指定しすると設定できますし、1日にする場合には「DAY_IN_SECONDS」と設定ください。

参考
Custom Post Password Cookie Expiry Time – Gists – GitHub
https://gist.github.com/3259814

まとめ

以上で解説を終了します。パスワード保護ページは特定の人にみてもらいたい記事などには便利な機能ですが、少し不格好なのがネックです。こちらの記事を参考にお好みの表示に変更してみてください。ちなみにパスワードで保護する場合というのは特定の人に見てもらいたいという場合と、記事を確認してもらいたいという場合があるかと思います。記事を確認してもらいたい場合等でしたら、プレビュー状態の記事をみることができるようになるプラグインなどがございますので、こちらも参考ください。
下書き記事を第三者が確認できるようにするプラグイン「Public Post Preview」