WordPressで固定ページや投稿ページにパスワードで閲覧制限をかける方法を見ていきましょう。
すごく簡単ですが、カスタマイズもでき、様々な用途に使えますので非常に便利です。
1.どのような用途で使用できるか?
この機能を使うと、例えば以下の様な用途で使用することができます。
- メルマガ会員専用のページの作成
- 社内用ページの作成
- 公開していない制作実績
基本的には、閲覧制限をかけたい時に使用するとは思いますが、注意しなければならないこととして、「重要度や秘匿性が高い情報」を扱っている場合は、このパスワード保護の方法は向いていません。このパスワード保護ではセキュリティー的には決して高くありませんので、外部に漏れてしまうとまずい情報やパスワードを記載する等は控えるべきでしょう。
2.パスワード保護の設定方法
それでは、設定を見ていきましょう。と言っても非常に簡単な方法で設定ができます。まずは、保護したいページを「新規追加」で作成します。
ページの内容を作成後、「公開」枠の「公開状態」から「編集」をクリックします。すると「パスワード保護」を選択できますので選択後、「パスワード」欄に任意でパスワードを設定できます。そして、入力後に「OK」をクリックし、「公開」をクリックするとパスワードで保護されたページが完成します。
投稿ページでも固定ページでもやり方は全く同じです。非常に簡単に閲覧制限をかけることができました。保護されたページにアクセスして確認してみてください。パスワードの入力を促されます。
ここまでは、パスワード保護の設定方法を見てきました。続いては、表示のカスタマイズをしていきましょう。
3.タイトルとメッセージ文のカスタマイズ
保護ページの表示をカスタマイズしていきます。カスタマイズには、「functions.php」を編集していきます。
3-1.タイトルのカスタマイズ
パスワード保護のページを作成すると、タイトルに「:保護中」と自動で表示されます。(投稿ページのみ)まずは、この表示を非表示にしましょう。
functions.php
add_filter('protected_title_format', 'remove_protected');
function remove_protected($title) {
return '%s';
}
参考:WordPressのパスワード保護ページをカスタマイズする方法
これで、「:保護中」を非表示にできました。
3-2.メッセージ分のカスタマイズ
次に、「このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。」というメッセージ分を編集していきます。こちらも、「functions.php」に次のコードを追加します。
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のパスワード保護ページをカスタマイズする方法
これで、任意のメッセージを表示できるようになりました。
4.カテゴリー一覧や記事一覧からも非表示にする
パスワード保護された記事は、記事一覧ページやカテゴリー一覧ページでは、リストに表示されてしまいます。こちらも非表示にしたい場合は、次のように追加します。
functions.php
function my_pre_get_posts ( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( $query->is_archive() ) {
$query->set( 'has_password', false );
}
}
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );
参考:使い倒す!WordPress「記事パスワード保護機能」活用術
5.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' );
「HOUR_IN_SECONDS」というWordPressの「定数」の部分を変更することで期間を変更することができます。ちなみに、この場合は1時間となります。他にも以下の様に定数を使用することができます。
MINUTE_IN_SECONDS = 60 (秒)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS (1時間)
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS (1日)
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS (1週間)
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS (1年)
参考:使い倒す!WordPress「記事パスワード保護機能」活用術
まとめ
以上、投稿ページや固定ページでパスワード保護をする方法をご紹介しました。パスワード保護する方法は、他にもプラグインやBASIC認証を使用する方法もあります。
保護する情報に合わせた方法を選択することが必要ではないでしょうか。