使い倒す!WordPress「記事パスワード保護機能」活用術

WordPressの「パスワード保護」機能、活用していますか?WordPressでは標準機能として各記事ごとに閲覧用パスワードを設定する事が可能なんです。

この機能を活用すれば、簡易的なコンテンツ配布の手段として役立つので、覚えておいて損はないですよ。

こんな場面で使えます!

1. セミナーや勉強会の資料配布
2. メルマガやステップメール登録者へのコンテンツ配布
3. デジタルコンテンツの販売
4. ブログ記事の一部コンテンツ閲覧制限

A. 記事のパスワード保護機能とは、どんなものか?

1. 動作(記事閲覧時)

記事にパスワードを設定した場合、以下のような動作になります。

パスワード未入力時

1. 記事タイトルの前に「保護中:」と表示される
2. 記事の本文は表示されず、代わりに「・・パスワードで保護されています・・」という文言とパスワード入力フォームが表示される

パスワード入力後

1. 通常通り記事の本文がすべて表示される

パスワード未入力時に記事ページを開いた時は、下画像のようになります。(パスワード入力フォームの見た目には手を加えていませんが、CSSでデザインを施す事ができます)

wordpress-post-password-01

2. 設定方法

設定は、すごく簡単です。WordPressの管理画面で記事を公開する際に・・

  1. 「公開」ボタンの少し上にある『公開状態』という項目の『編集』リンクをクリック
  2. 『パスワード保護』を選択して設定したいパスワードを入力
  3. あとは通常通り「公開」ボタンをクリックして公開

たった、これだけ。既にWordPressでブログやWebサイトを運用していれば、今すぐできますね。

wordpress-post-password-02

B. ここが嬉しい!記事のパスワード保護機能

1. 会員ログイン式の仕組みが不要

ブログやWebサイト全体に閲覧制限を掛けたい場合は、当サイト記事「パターン別『Theme My Login』その他を利用した会員サイト構築のアイデアまとめ」でお話しているように、会員サイト構築用のWordPressプラグインなどを導入&設定する必要がありますが・・、

「記事のパスワード保護」機能では、こういった仕組みが不要です。標準のWordPress機能で、利用可能になっています。

2. 記事ごとに閲覧制限を掛けることができる

記事ごとに個別のパスワードが設定できるので、閲覧制限を掛けたいコンテンツごとに記事を用意し、それぞれに別々のパスワードを設定することも可能です。

3. 記事の途中からパスワード保護も可能(少し工夫が必要)

こちらは少しプログラミング知識が必要となりますが、パスワード未入力時の記事ページに表示される文言の出力方法をカスタマイズすることで、「記事の途中までは公開、それ以降はパスワード入力で閲覧可能」といった仕組みを作ることが可能です。

C. functions.phpでさらにカスタマイズ!

標準のままでも十分使える機能ですが、WordPressテーマのfunctions.phpに色々コードを追加することで、さらに細かい仕様も実現できます。以下にいくつか、ご紹介。

1. タイトルの「保護中:」を消す

記事にパスワード保護を掛けた場合、記事タイトルの先頭に「保護中:」という文言が自動追加されます。

これイラナイヨって時には以下のコードをfunctions.phpに追記すれば、元の記事タイトルだけが表示されるようになります。

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

2. 標準の文章を変更する

パスワード未入力時には、本来記事本文が表示される部分に「・・パスワードで保護されています・・」といった定型文が表示されます。

ここを自分の好きな定型文にしたい場合は、以下のコードをfunctions.phpへ追記しましょう。

function my_password_form() {
function my_password_form( $output ) {
  $text = '';
  $text .= '<p>こちらの記事は会員のみ閲覧いただけます。</p>';
  $text .= '<div id="protectedForm" style="margin-top: 1.6rem;">';
  $text .= '  <form action="' . home_url() . '/wp-login.php?action=postpass" method="post">';
  $text .= '    <input name="post_password" type="password" size="24" />';
  $text .= '    <input type="submit" name="submit" value="' . esc_attr__('パスワードを認証') . '" />';
  $text .= '  </form>';
  $text .= '</div>';
  
  return $text;
}
add_filter( 'the_password_form', 'my_password_form' );
}
add_filter( 'the_password_form', 'my_password_form' );

これで、「こちらの記事は会員のみ閲覧いただけます。」という文言に変更されます。

$text内はhtmlコードで良いので、例えばメルマガ会員だけにパスワードを教えているような場合、以下のようにメルマガ会員登録フォームのコードを貼り付けておけば、パスワード保護された各記事に会員登録フォームが自動で表示されるので登録率があがるかも。

function my_password_form() {
	$text = '';
	$text .= '<div class="unlock-area">';
	$text .= '  <p>こちらの記事は会員のみ閲覧いただけます。</p>';
	$text .= '  <div id="protectedForm" style="margin-top: 1.6rem;">';
	$text .= '    <form action="' . home_url() . '/wp-login.php?action=postpass" method="post">';
	$text .= '      <input name="post_password" type="password" size="24" />';
	$text .= '      <input type="submit" name="submit" value="' . esc_attr__('パスワードを認証') . '" />';
	$text .= '    </form>';
	$text .= '  </div>';
	$text .= '  <p>閲覧をご希望の方は、会員登録して記事閲覧用のパスワードを入手ください。</p>';
	$text .= '  <!---------------------------->';
	$text .= '  <!-- ここに登録フォームのコード -->';
	$text .= '  <!---------------------------->';
	$text .= '</div>';

	return $text;
}
add_filter( 'the_password_form', 'my_password_form' );

さらに、「記事の抜粋」や「カスタムフィールド」などを活用することで、記事ごとに個別の文章を表示されることも可能です。例えば、記事を途中まで公開し、その後はパスワード入力が必要・・といった仕組みも実現できますね。

3. 一覧に表示させない

カテゴリー一覧やタグ一覧など、記事情報を一覧するようなページでは、パスワード保護されている記事も通常通り一覧の中に表示されます。

単にブログ記事の一部をパスワード制限している場合はそれでも良いですが、メルマガ読者やセミナー/勉強会の参加者など、特定の人以外にはなるべく記事(コンテンツ)の存在を場合、一覧ページからパスワード保護された記事が表示されない方が良い場合もあります。これもfunctions.phpへのコード追記で実現可能です。

例えば、アーカイブページ(カテゴリー一覧、タグ一覧など)でパスワード保護された記事を表示させないようにするには、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' );

pre_get_postsは、各ページに表示するための記事データを取得する時の条件を設定できるフック(仕組み)です。

$query->is_archive()が、アーカイブページかどうかの判定。$query->set( 'has_password', false )で、「パスワードが設定されていない記事データのみを取得して表示」しています。

4. パスワード保持期間を短くする

記事の保護パスワードですが、WordPressの標準仕様では「10日間」有効となっています。

これはつまり、一度パスワードを入力すれば10日間は入力無しで記事が閲覧できるという事です。

これで問題無ければ良いですが、例えば定期的にパスワードを変更したいとか、共有パソコンで10日間誰でも見られる状態になるのはちょっと嫌だとか、そういう場合はこのパスワード有効期間を短くしましょう。

以下をfunctions.phpに記述すると、パスワードの有効期限が1時間になります。(パスワードを入力後、1時間すれば再び「パスワードを入力してください」フォームが表示される)

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

(参考) wordpressのパスワード保護で、保持期限をfunctions.phpとアクションフックで変更する

D. さらなるアイデア

その他、functions.phpへのより複雑なコードの追記や、WordPressプラグインの導入&改造が必要になる事もありますが、一応こんな事も出来ますよということでいくつかアイデアをご紹介しておきます。

1. 毎月1回パスワードを自動更新して通知

会員制サイト・メルマガ配信・CRONなどの仕組みを組み合わせる事で、毎月記事のパスワードを自動更新してパスワード取得者へ自動通知するような仕組みも実現できそうです。

2. 全記事の保護パスワードを自動で共通化

共通パスワード設定用のページをWordPress管理画面のどこかに作って、そこでパスワードを変更すれば保護設定されているすべての記事のパスワードが変更される、といった機能は作れそうです。

すべての記事で共通の保護パスワードにしたい場合、毎回記事に設定するのは面倒だし、いざパスワード変えようと思ったら全記事を再設定しなきゃいけないので・・。

3. Paypal決済プラグインと連携して簡易記事課金サイトに

Paypal決済での購入管理が可能なWordPressプラグインを導入することで、記事ごとに課金(購入)する仕組みもできます。各コンテンツの購入時に設定されたパスワードを決済完了メールにて教えるような形式です。

僕も以前、簡易的な記事課金の仕組みが必要だった時に、WordPressプラグイン「Easy Digital Downloads」と今回の記事パスワード保護を組み合わせて実現したことがあります。毎回の販売コンテンツ設定がやや面倒でしたが、一応動いています。(機会があれば、この仕組みについても詳しく解説します)

E. まとめ

WordPressの「記事パスワード保護機能」について色々解説してみましたが、いかがでしょうか?

会員制サイト用のプラグインをインストールする必要もないので、簡易的な限定コンテンツ配布の仕組みなどには導入しやすい機能じゃないかと思います。

ぜひ、活用してみてください。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA